Fórum Erro de exceção classe Scanner #589375

30/11/2017

0

Galera, bom dia!
Eu postei um código no URI e está apresentando este erro:

Exception in thread "main" java.util.InputMismatch:
	at java.util.Scanner.throwFor(Scanner.java:914)
	at java.util.Scanner.next(Scanner.java:1535)
	at java.util.Scanner.nextInt(Scanner.java:2165)
	at java.util.Scanner.nextInt(Scanner.java:2124)
	at Main.main(Main.java:32)
Command exited with non-zero status (1)


e não é a primeira vez que apresenta erro nesta classe Scanner, alguém sabe o motivo? Segue o código do programa:

public class Main {
 
    public static void main(String[] args) throws IOException {
 
		Scanner s = new Scanner(System.in);
		int PA = 0;
		int PB = 0;
		double G1 = 0;
		double G2 = 0;
		int anos = 0;
		
		int T = s.nextInt();
		while ((T < 1) || (T > 3000)) {
			T = s.nextInt();
		}
		
		for (int i = 0; i < T; i++) {
			PA = s.nextInt();
			while ((PA < 100) || (PA > 1000000)) {
				PA = s.nextInt();
			}
			
			PB = s.nextInt();
			while ((PB < PA) || (PB > 1000000)) {
				PB = s.nextInt();
			}
			
			G1 = s.nextDouble();
			while ((G1 < 0.1) || (G1 > 10.0)) {
				G1 = s.nextDouble();
			}
			
			G2 = s.nextDouble();
			while ((G2 < 0) || (G2 > 10.0)) {
				G2 = s.nextDouble();
			}
			
			while (PA <= PB) {
				anos++;
				
				PA = (int) (PA + PA * (G1/100));
				PB = (int) (PB + PB * (G2/100));
				
				if (anos > 100) {
					PA = 1;
					PB = 0;
				}

			}
			
			if (anos > 100) {
				System.out.println("Mais de 1 seculo.");
			} else {
				System.out.println(anos + " anos.");
			}
			anos = 0;
		}
 
    }
 
}
Frederico Silva

Frederico Silva

Responder

Posts

30/11/2017

Paulo Carvalho

Fala Frederico, tudo bem?

A classe Scanner serve para captar algo digitado na tela do Console. Pelo seu código não percebi nenhum momento você passando essa responsabilidade de digitar alguma informação para o usuário da sua aplicação console. Se você não está recebendo nada digitado na tela, então o retorno da função nextInt() será null. Por isso o erro de InputMismatch. Você captando uma informação do tipo inteiro da tela já resolve essa parada com certeza.
Responder

Gostei + 0

30/11/2017

Frederico Silva

Olá Paulo, boa tarde!
Muito obrigado pelo seu tempo!
Então, ainda fiquei com dúvida, eu pensei que fazendo assim
PA = s.nextInt();
o programa já iria entender que era esperado um valor digitado. O que eu tenho que fazer antes de atribuir o conteúdo lido (s.nextInt()) à variável PA?

Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar