O programa abaixo se o usuário de enter quando pede a idade dá erro. Como eu resolvo isto?
l) Escreva uma Programa que receba a idade de 10 pessoas, calcule e imprima a quantidade de pessoas
maiores de idade (idade maior= 18 anos).
[code]
import java.io.*;
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
try{
int pessoas, pesmaiores, cont;
BufferedReader leitor = new BufferedReader(new InputStreamReader(System.in));
cont=10;
pesmaiores=0;
pessoas=0;
while (cont>0){
System.out.println("Entre com a idade.");
pessoas=Integer.parseInt(leitor.readLine());
if (pessoas>=18){
pesmaiores=pesmaiores+1;
}
cont–;
}
System.out.println(“A quantidade de pessoas maiores de 18 anos é “+pesmaiores+”.”);
}
catch (IOException e){
}
}
}[/code]
guarde o resultado de leitor.readLine() em uma string, no lugar de fazer o parse direto para int…
verifique se o que foi digitado é vazio, e se é um número, e não sendo mostre a msg, “Por favor digite um valor númerico” … fique no loop pedindo o valor numérico ate a pessoa digitar um número… so ai, passe a frente, e guarde o valor e de o increse no seu count…
boa sorte
Boa tarde Ziguifrid,
[code]
import java.io.*;
/**
*
-
@author Eduardo Gouveia
*/
public class Main {
public static void main(String[] args)
{
try
{
int pessoas = 0;
int pesmaiores = 0;
int pesmenores = 0;
BufferedReader leitor = new BufferedReader(new InputStreamReader(System.in));
for ( int i = 0; i < 10; i++ )
{
System.out.println("Entre com a idade.");
pessoas = Integer.parseInt(leitor.readLine());
if ( pessoas >= 18 )
{
pesmaiores++;
}
else
{
pesmenores++;
}
}
System.out.println("Quantidade de pessoas maiores de 18 anos é: "+pesmaiores+".");
System.out.println("Quantidade de pessoas menores de 18 anos é: "+pesmenores+".");
}
catch (IOException e)
{
e.printStackTrace();
}
catch (ArithmeticException ex)
{
ex.printStackTrace();
}
}
} [/code]
Ziguifrid dica:
*Sempre que for utilizar algo contador e que tenha um valor finito de variações (ex: 10) aconselho a estrutura de repetição
for(inicialização; condicional; incremento){} que facilitará e realizará uma limpeza em seu código em relação ao while(condicional){}
Coloquei também as pessoas menores caso precise
Espero ter Ajudado,
:lol:
Valeu Eduardog, só que ainda continua dando erro. Copiei o seu código e o erro persiste, quando dou enter na idade aparece isso no console.
run:
Entre com a idade.
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:468)
at java.lang.Integer.parseInt(Integer.java:497)
at exforum.Main.main(Main.java:29)
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 5 segundos)
Há não ser que tem que fazer o que o Lavieri disse no post anterior ao seu, só que eu não entendi como fazer.
Boa Tarde Ziguifrid,
Esta exceção é levantada quando você digita um valor que não corresponde a um digito [0…9] ocorreu comigo também so que era levantada quando eu digitava muito rápido e clica “Enter”;
E justamente esta linha For input string: ""
identifica que você está passando uma String branco como se estivesse realmente clicando enter duas vezes ao invés de entrar com um digito.
Aconselho realizar o procedimento de forma pausada para ter certeza que não seja isto;
De ante mão, irei fazer a mesma função de uma forma de entrada dos dados graficamente utilizando o JOptionPane;
[code]import javax.swing.JOptionPane;
/**
*
-
@author Eduardo Gouveia
*/
public class Main {
public static void main(String[] args)
{
try
{
int pessoas = 0;
int pesmaiores = 0;
int pesmenores = 0;
for ( int i = 0; i < 10; i++ )
{
String idade = JOptionPane.showInputDialog("Entre com a idade.");
pessoas = Integer.parseInt(idade);
if ( pessoas >= 18 )
{
pesmaiores++;
}
else
{
pesmenores++;
}
}
JOptionPane.showMessageDialog(null,“Quantidade de pessoas maiores de 18 anos é: “+pesmaiores+”.”,“Informação”);
JOptionPane.showMessageDialog(null,“Quantidade de pessoas menores de 18 anos é: “+pesmenores+”.”,“Informação”);
}
catch (ArithmeticException ex)
{
ex.printStackTrace();
}
}
}[/code]
Espero ter ajudado,