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.
Algoritmo
Var
vet : vetor[1..5] de inteiro
i, j, k: inteiro
repetido : logico
Inicio
escreval("Vamos começar?")
escreval("Digite números entre 10 e 100 (inclusive)")
para i de 1 ate 5 faca
escreval("Digite o ", i, "º número")
leia(k)
//Importante: vaalidar os valores de entrada, entre 10 e 100
repetido <- FALSO
j <- i
enquanto j > 0 faca
k <- vet[j]
se (j <> i) e (k = vet[i]) entao
repetido <- VERDADEIRO
fimse
j <- j - 1
fimenquanto
se nao repetido entao
escreval(vet[i])
fimse
fimpara
Fimalgoritmo
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.
Galera eu tentei repessar o algoritmo para Java, porem apresentou alguns erros
Codigo:
public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);
int vet[] = new int[5];
int i,j,k;
boolean repetido;
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 while
if(repetido == false){
System.out.println(vet[i]);
}
} // fim for
} // fim metodo main
Console:
Digite numeros entre 10 e 100 (inclusive)
Digite o 1 numero: 1
0
Digite o 2 numero: 2
Digite o 3 numero: 3
Digite o 4 numero: 4
Digite o 5 numero: 5
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 5
at deitelcomoprogramar8edicaop228ex7.pkg12.DeitelComoProgramar8EdicaoP228Ex712.main(DeitelComoProgramar8EdicaoP228Ex712.java:35)
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(int i = 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;//Veja a mudança nesta linha
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 {
public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);
int vet[] = new int[5];
int i,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 while
for(int l = 0; l < vet.length;l++){
if(vet[l] != 0){
System.out.print(vet[l]+" ");
}else{
System.out.print("");
}
} // fim for interno
System.out.println();
} // fim for externo
} // fim metodo main