Ir ao conteúdo

Posts recomendados

Postado

Estou com uma certa dificuldade em fazer esse código rodar e de entender o erro. Preciso resolver a seguinte questão

 

Leia N números em um array de dimensão informada na entrada. Para este array, conte e imprima a quantos de seus elementos são repetidos. Cada valor repetido conta uma vez, independentemente da quantidade de repetições.

ENTRADA

A entrada contém um conjunto de teste que deve ser lido da entrada padrão. A primeira linha contém um número N ( 2 ≤ N ≤ 100 ). Este número N representa a quantidade de números a ser lida em seguida. Cada um destes números estará em uma linha posterior, sendo um valor inteiro positivo válido M ( 1 ≤ M ≤ 100 ).

SAÍDA

Seu programa deve imprimir, na saída padrão, uma resposta em uma linha contendo a quantidade de elementos com ocorrências repetidas do array.

ENTRADA

8 1 2 3 1 2 3 4 5

SAÍDA

3

 

import java.util.Scanner;
import java.util.Arrays;

public class Repetidos{

public static void main(String[] args){
	Scanner leitor = new Scanner(System.in);
	int quant=2;
	int repetido=0;
	int cond=1;
		
	while(quant <2 && quant >100);{
	System.out.print("Quantos números deseja verificar? ");
	}
	
	quant = leitor.nextInt();
	int numeros[] = new int[quant]; // array numeros recebe a quantidade de numeros a ser lida
	
	do{
		System.out.println("Digite os "+quant+" numeros:");
	}while (cond <1 && cond>100);



	for (int i=0; i<=numeros.length; i++){
		
		
		numeros[i]= leitor.nextInt();
		

		
		for(int z=i-1; z>=0; z--){
			if(numeros[z]==numeros[i]){
				repetido++;
				break;
			}
		}
	}

	System.out.println("Existem "+repetido+" numeros repetidos");
	}
  }

 

O problema é que na hora de pedir pra digitar o programa sempre aceita digitar um número a mais.

Ainda me aparece uma mensagem de erro assim: "Exception in thread "main" java.lang.ArrayIndexOutofBoundsException: Index 2 out of bounds for length 2

                                                                                            at Repetidos.main(Repetidos.java:28)

 

Alguém me ajuda por favor. Agradeço desde já.

adicionado 4 minutos depois

E ainda se eu digitar algo diferente entre o laço while nos dois casos ele me dá uma mensagem de erro do tipo

"Exception in thread "main" java.lang.NegativeArraySizeException: -1 (o valor no caso que eu digitei)

   at Repetidos.main(Repetidos.java:17)

 

E daí o programa fecha. Eu queria que o usuário continuasse no laço enquanto ele não digitar o valor correto.

adicionado 21 minutos depois

Já resolvi a saída padrão de números.  Troquei o <= por < e saiu certinho. O problema é quando o usuário digita um número inválido. Não há como deixar ele dentro do laço sem finalizar o programa??

for (int i=0; i<numeros.length; i++){
		
		
		numeros[i]= leitor.nextInt();
		

		
		

 

  • Amei 1
Postado

@pedro02     para descartar o número invalido coloque o leitor dentro de um loop que repetirá caso precise ,  e na hora de verificar se é repetido ,  seria melhor começar o loop for z de zero mesmo , pois do jeito que está ele vai verificar da posição do valor de  i   em diante e os anteriores não serão verificados .  e aquele loop while e do / while ,   lá no começo , pode deleta-los pois não estão fazendo nada ali .

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...