Erro na entrada de valor vazio

4 respostas
Ziguifrid

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).

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){
    
}
}
}

4 Respostas

Lavieri

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

Eduardog

Boa tarde Ziguifrid,

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();
     }  
  }  
}

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:

Ziguifrid

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.

Eduardog

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;

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();
     }
  }
}

Espero ter ajudado,

:)

Criado 5 de abril de 2009
Ultima resposta 6 de abr. de 2009
Respostas 4
Participantes 3