Tava estudando pelo Deitel e me deparei com a seguinte questao:
(Eliminacao de duplicatas)Utilize um array unidimensional para resolver o seguinte problema: Escreva um aplicativoque insere cinco numeros, cada uma entre 10 e 100,inclusive. A medida que cada numero é lido, so
o exiba se ele nao for uma duplicata de um numero ja lido.Cuide de tratar o “pior caso”, em que todos os cinco numeros sao diferentes.Utilize o menor array possivel para resolve o problema. Exiba o conjunto completo de valores unicos inseridos depois que o usuario inserir cada valor novo.
Ja tentei usar if encadeado, equals mas ate o momento nao obtive exito. Agradeço desde ja pessoal.
AlgoritmoVarvet:vetor[1..5]deinteiroi,j,k:inteirorepetido:logicoInicioescreval("Vamos começar?")escreval("Digite números entre 10 e 100 (inclusive)")paraide1ate5facaescreval("Digite o ",i,"º número")leia(k)//Importante:vaalidarosvaloresdeentrada,entre10e100repetido<-FALSOj<-ienquantoj>0facak<-vet[j]se(j<>i)e(k=vet[i])entaorepetido<-VERDADEIROfimsej<-j-1fimenquantosenaorepetidoentaoescreval(vet[i])fimsefimparaFimalgoritmo
Veja se isso clarei tuas ideias…
L
Lucas_Camara
Clareia d+. O algoritmo, aparentemente, está de acordo com o problema proposto. A implementação que deve está zuada.
I
IgorPTZ
Desculpa nao postar o codigo pessoal, tava tao zuado que eu nem postei. Muito obrigado pela ajuda pessoal, vou tentar implementar esse algoritmo e retorno com uma noticia.
I
IgorPTZ
Meu codigo, achei muito zuado depois que olhei com calma:
public static void main(String[] args) {
Scannerteclado=newScanner(System.in);intarray[]=newint[5];System.out.print("Digite o 1º numero: ");array[0]=teclado.nextInt();Arrays.sort(array);System.out.println("Numeros lidos: "+array[0]);System.out.print("Digite o 2º numero: ");intvalor2=teclado.nextInt();intbusca=Arrays.binarySearch(array,valor2);if(busca<0){array[1]=valor2;System.out.print("Numeros lidos: ");for(inti=0;i<array.length;i++){for(intnumeros:array){if(numeros!=0){System.out.print(numeros+" ");}else{System.out.print("");}}// fim for}}else{System.out.print("Numeros lidos: ");for(inti=0;i<array.length;i++){for(intnumeros:array){if(numeros!=0){System.out.print(numeros+" ");}else{System.out.print("");}}// fim for}}System.out.print("Digite o 3º numero: ");intvalor3=teclado.nextInt();busca=Arrays.binarySearch(array,valor3);if(busca<0){array[2]=valor3;System.out.print("Numeros lidos: ");for(inti=0;i<array.length;i++){for(intnumeros:array){if(numeros!=0){System.out.print(numeros+" ");}else{System.out.print("");}}// fim for}}else{System.out.print("Numeros lidos: ");for(inti=0;i<array.length;i++){for(intnumeros:array){if(numeros!=0){System.out.print(numeros+" ");}else{System.out.print("");}}// fim for}}System.out.print("Digite o 4º numero: ");intvalor4=teclado.nextInt();busca=Arrays.binarySearch(array,valor4);if(busca<0){array[3]=valor4;System.out.print("Numeros lidos: ");for(inti=0;i<array.length;i++){for(intnumeros:array){if(numeros!=0){System.out.print(numeros+" ");}else{System.out.print("");}}// fim for}}else{System.out.print("Numeros lidos: ");for(inti=0;i<array.length;i++){for(intnumeros:array){if(numeros!=0){System.out.print(numeros+" ");}else{System.out.print("");}}// fim for}}System.out.print("Digite o 5º numero: ");intvalor5=teclado.nextInt();busca=Arrays.binarySearch(array,valor5);if(busca<0){array[4]=valor5;System.out.print("Numeros lidos: ");for(inti=0;i<array.length;i++){for(intnumeros:array){if(numeros!=0){System.out.print(numeros+" ");}else{System.out.print("");}}// fim for}}else{System.out.print("Numeros lidos: ");for(inti=0;i<array.length;i++){for(intnumeros:array){if(numeros!=0){System.out.print(numeros+" ");}else{System.out.print("");}}// fim for}}}// fim metodo main
} // fim classe principal
I
IgorPTZ
Galera eu tentei repessar o algoritmo para Java, porem apresentou alguns erros
Codigo:
public static void main(String[] args) {
Scannerteclado=newScanner(System.in);intvet[]=newint[5];inti,j,k;booleanrepetido;System.out.println("Digite numeros entre 10 e 100 (inclusive");for(i=1;i<=5;i++){System.out.print("Digite o "+i+" numero: ");k=teclado.nextInt();repetido=false;j=i;while(j>0){k=vet[j];if((j!=i)&&(k==vet[i])){repetido=true;}j--;}// fim whileif(repetido==false){System.out.println(vet[i]);}}// fim for}// fim metodo main
O algoritmo é, apenas, um “mapa” para implementar. Não deve ser seguido ipsis literis.
O que quero dizer?
Por exemplo, é comum, quando escrevemos algoritmos, considerar que os vetores partam da casa 1, enquanto que, na maioria das linguagens de programação, a primeira posição é a posição 0.
Ou seja, você tem duas alternativas para solucionar este problema (em específico):
for(inti=0;i<5;i++){System.out.println("Digite o "+(i+1)+"º número");k=Integer.parseInt(teclado.nextLine());vet[i]=k;
Ou
for(i = 1; i <= 5;i++){
System.out.print("Digite o "+i+" numero: ");k=teclado.nextInt();vet[i-1]=k;//Vejaamudançanestalinha
I
IgorPTZ
Boa noite, galera depois de fazer alguns ajustes enfim consegui resolver o exercicio. Fiz alguns testes e creio que n deixei nada de fora. Obrigado a todos que ajudaram.
public class DeitelComoProgramar8EdicaoP228Ex712 {
publicstaticvoidmain(String[]args){Scannerteclado=newScanner(System.in);intvet[]=newint[5];inti,j,k;System.out.println("Digite numeros entre 10 e 100 ");do{System.out.print("Digite o 1º numero: ");k=teclado.nextInt();if((k<10)||(k>100)){System.out.println("Numero invalido,insira outro numero.");}else{vet[0]=k;System.out.print(vet[0]+"\n");}}while((k<10)||(k>100));for(i=1;i<5;i++){System.out.print("Digite o "+(i+1)+" numero: ");k=teclado.nextInt();vet[i]=k;j=i;while(j>=0){if((j!=i)&&(k==vet[j])){vet[i]=0;}if(j==0){break;}j--;}// fim whilefor(intl=0;l<vet.length;l++){if(vet[l]!=0){System.out.print(vet[l]+" ");}else{System.out.print("");}}// fim for internoSystem.out.println();}// fim for externo}// fim metodo main