Usuário define quantas instacias serão feitas para um obje
3 respostas
X
Xavier_RSPJ
Bom estou com o seguinte problema:
Preciso fazer um programa que ordene um vetor usando threads, o número de threads que o programa irá usar para odenar o vetor é definido pelo usuário no momento da execução.
Alguém sabe com faço para instanciar obejetos dependedo do número de instancias que o usuário definiu.
Por exemplo se o usuário me disser que vai usar 2 threads como faço para instanciar 2 vezes o objeto.
Tentei desta forma mas não funcionou:
...
MinhaThreadthreads[]=newMinhaThread[numeroInstancias]; // Array de Threads com o número definido pelo usuáriofor(inti=0; i < threads.length; i++ ) // Popula o Array com instâncias de MinhaThreadthreads[i]=newMinhaThread();
...
Tem que ver como que você está tentando fazer. Se quiser postar teu código!
Valeu!
Att,
Pablo Alves
X
Xavier_RSPJ
Cara valeu pela ajuda, estou começando com java agora e não conheço muito a liguagem.
Deu alguns erros na execução vou postar meu código se vc puder me dar uma ajuda ou quem estiver online puder me ajuda. preciso instanciar objetos de forma que usuário define quantas são as instancias na hora da execução:
publicclassVetor{publicintVet[],Vet2[];privateintNumeroInicial,NumeroFinal,UltimaPosicao,PrimeiraPosicao,QTDPosicao;publicvoidInicializa(){Vet=newint[100001];Vet2=newint[100001];NumeroInicial=0;NumeroFinal=0;UltimaPosicao=0;PrimeiraPosicao=0;QTDPosicao=0;}publicvoidInsereVetor(){inti=0;while(i<=100000){if(i<=Vet.length)Vet[i]=(int)(Math.random()*100000);i++;}}synchronizedpublicvoidOrdenaVetor(intNI,intNF,intVetAux[]){intAux1,Aux2;NumeroInicial=NI;NumeroFinal=NF;QTDPosicao=0;for(inti=0;i<=100000;i++){if((Vet[i]>=NumeroInicial)&&(Vet[i]<=NumeroFinal)){VetAux[0]=Vet[i];i=100000;}}for(intj=0;j<=100000;j++){if((Vet[j]>=NumeroInicial)&&(Vet[j]<=NumeroFinal)){if(Vet[j]>=VetAux[QTDPosicao]){QTDPosicao=QTDPosicao+1;VetAux[QTDPosicao]=Vet[j];}else{Aux1=Vet[j];for(inta=0;a<=QTDPosicao;a++){if(VetAux[a]>Aux1){Aux2=VetAux[a];VetAux[a]=Aux1;Aux1=Aux2;}}if(j<100000){QTDPosicao=QTDPosicao+1;VetAux[QTDPosicao]=Aux1;}}}}}synchronizedpublicvoidInsereOrdenado(intVetAux[]){intn=0;UltimaPosicao=UltimaPosicao+QTDPosicao;for(intb=PrimeiraPosicao;b<=UltimaPosicao;b++){Vet2[b]=VetAux[n];n++;}PrimeiraPosicao=PrimeiraPosicao+QTDPosicao;}publicvoidImprimeVetor(intPIni,intPFin){inti=PIni;while(i<=PFin){if(i<=Vet2.length){System.out.println(Vet2[i]+" i "+i);}i++;}System.out.println("Ultimaposicao "+UltimaPosicao+" QTDPosicao "+QTDPosicao+" PrimeiraPosicao "+PrimeiraPosicao);}}classOrdenaextendsThread{privateintVetAux[];privateVetorV;privateintNI,NF;publicOrdena(VetorVAux,intI,intF){V=VAux;NI=I;NF=F;VetAux=newint[100001];}synchronizedpublicvoidRun(){V.OrdenaVetor(NI,NF,VetAux);V.InsereOrdenado(VetAux);}}publicclassInicio{publicstaticvoidmain(String[]args){VetorV;V=newVetor();V.Inicializa();V.InsereVetor();threads[]=newOrdena(V,0,100000);// Array de Threads com o número definido pelo usuário for(inti=0;i<threads.length;i++)// Popula o Array com instâncias de MinhaThread threads[i]=newOrdena(V,0,10000);V.ImprimeVetor(0,100000);}}
Conto com a ajuda de alguem pois preciso entregar o trabalho na segunda feira Valeu…
[size=“11”][color=“red”]* Editado: Lembre-se de utilizar BBCode em seus códigos[/color][/size] :joia:
D
diego_umpierrePJ
Ola Xavier_RS segue alguns erros que eu achei nas tuas classes.
Na classe Vetor.java
...
synchronizedpublicvoidInsereOrdenado(intVetAux[]){intn=0;UltimaPosicao=UltimaPosicao+QTDPosicao;for(intb=PrimeiraPosicao;b<=UltimaPosicao;b++){/*ESSA ATRIBUIÇÃO ESTÁ INCORRETA, POIS TU ESTAS TENTANDO ATRIBUIR UM INT ( VetAux[n] ) PARA UM ARRAY DE INT ( Vet2 ). ACREDITO QUE O TU QUERES FAZER EH ATRIBUIR O VALOR DE( VetAux[n] ) PARA UMA POSIÇÃO DE VET2, SENDO ASSIM TERIA QUE SER ALGO ASSIM:vet2[ posição_que_eu_quero] = vetAux[n];*/Vet2=VetAux[n];n++;}
...
Na classe Inicio.java
...
threads[]=newOrdena(V,0,100000);/*SE A TUA IDEIA ERA DECLAR UM ARRAY DO TIPO THEREAD ESTA ERRADO.DECLARAÇÃO DE UM ARRAY: TIPO_DO_ARRAY NOME_VARIAVEL[] = new TIPO_DO_ARRAY[NUMERO_POSICOES] ;SE FOR ISSO FICARIA MAIS OU MENOS ASSIM:Theread threads[] = new Thread[numero_x]; // teria que importar: java.lang.Thread;*/
Depois disso tudo a lógica do teu programa tem que ser verificada.
Espero que ajude.
8O
[size="11"][color="red"]* Editado: Lembre-se de utilizar BBCode em seus códigos[/color][/size] :joia: