Try/Catch

6 respostas
R

Eu tentei fazer meu primeiro código com o uso do try/catch (já que estou apenas começando na programação em java) e queria saber pq na linha 9 está ocorrendo um erro...
O objetivo do programa é inserir a quantidade de alunos de uma suposta sala, registrar seus nomes e depois atribuir nota à eles! O problema, é que eu gostaria de corrigir para se a pessoa digitar uma letra, digitar '0' ou digitar um número float ou double!
O código é o seguinte:

[quote]public class Aula10 {
    public static void main(String[] args){
        Scanner input = new Scanner (System.in);

    //Quantidade de alunos
        String ii;
        try{
        ii = JOptionPane.showInputDialog(null,"Digite a quantidade de alunos:");
      } catch(NumberFormatException e){
            JOptionPane.showMessageDialog(null,"O número deve ser inteiro","Alunos",2);
            System.exit(0);
        }
     int i = Integer.parseInt(ii);
     String[] alunos = new String[i];
     int[][] media = new int [3][i];
     int[] soma = new int [i];
     int[]soma2 = new int[i];
       
     
     //
     
     //Nome dos alunos
     for (int y = 0; y < i; y++){
         alunos[y] = JOptionPane.showInputDialog(null, y+1 + ") Nome: ", "Registro",1);
     }
     
     
     //Notas dos Alunos
     JOptionPane.showMessageDialog(null,"Informe as 3 notas do trimestre dos alunos","Alunos",2);
    for (int l = 0; l < i; l++){
        JOptionPane.showMessageDialog(null,alunos[l]);
      for (int c = 0; c < 3; c++) {
          int localizador = c + 1;         
     String[][] media2 = new String[3][i];
     media2[c][l] = JOptionPane.showInputDialog(null, "Nota " + localizador + ":");
     media[c][l] = Integer.parseInt(media2[c][l]);
      }
}
    

    
    // Somar as notas
for (int v = 0; v < i; v++){
        for (int y = 0; y < 3; y++) {
            soma2[v] += media[y][v];
       }
 }
for (int y = 0; y < i; y++)
soma[y] = soma2[y];


    //Mostrar as notas
JOptionPane.showMessageDialog(null,"As notas dos alunos são: ");
    for (int quantidade = 0; quantidade < i; quantidade++){
        if (soma[quantidade] >= 18 && soma[quantidade] <= 30){
            JOptionPane.showMessageDialog(null,alunos[quantidade] + " = " + soma[quantidade] + "   Aprovado");
        } else if (soma[quantidade] > 30) {
           JOptionPane.showMessageDialog(null,alunos[quantidade] + " = " + soma[quantidade] + "   Typing Error");
        } else {
            JOptionPane.showMessageDialog(null,alunos[quantidade] + " = " + soma[quantidade] + "   Reprovado");
        }
        }
    }
}[/quote]

6 Respostas

G
String ii;

tente:

String ii = null;

você deve inicializar uma variavel local antes de usa-la.

G

acho deveria ser assim:

//Quantidade de alunos String ii = JOptionPane.showInputDialog(null,"Digite a quantidade de alunos:"); int i; try{ i = Integer.parseInt(ii); } catch(NumberFormatException e){ JOptionPane.showMessageDialog(null,"O número deve ser inteiro","Alunos",2); System.exit(0); }

R

Eu fiz desta forma, quando insiro uma letra propositalmente, aparece o seguinte:

[color=red]Exception in thread main java.lang.NumberFormatException: For input string: kat java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)

at java.lang.Integer.parseInt(Integer.java:492)

at java.lang.Integer.parseInt(Integer.java:527)

at projetoreaprendendo.Aula10.main(Aula10.java:24)

Java Result: 1[/color]

Deveria aparecer que deve-se inserir um número inteiro, não?

freakazoid

Coloca a linha int i = Integer.parseInt(ii); dentro do seu bloco try.

try{  
              ii = JOptionPane.showInputDialog(null,"Digite a quantidade de alunos:");  
              int i = Integer.parseInt(ii);  //    <------------------ aqui
            } catch(NumberFormatException e){  
                JOptionPane.showMessageDialog(null,"O número deve ser inteiro","Alunos",2);  
                System.exit(0);  
            }

Abs!

R

Rapaz, agora está dando um outro erro! Quando eu insiro o valor que quero (número inteiro) o programa fecha!

Problema resolvido! Tirei a declaração do método principal e joguei ela como uma variavel public static.

R

Quem quiser ver o código certo (porém não está completo, pois tem muito o que melhorar, vou disponibilizar aqui o que consegui fazer com a ajuda de vocês):

import javax.swing.*;
import java.util.Scanner;


/**
 *
 * @author Lucas
 */

public class Aula10 {  
    public static int i;
  public static void main(String[] args){  
       Scanner input = new Scanner (System.in);  
 
    //Quantidade de alunos  
        String ii = JOptionPane.showInputDialog(null,"Digite a quantidade de alunos:");    
    try{
        i = Integer.parseInt(ii);    
        } catch(NumberFormatException e){    
            JOptionPane.showMessageDialog(null,"O número deve ser inteiro","Alunos",2);    
            System.exit(0);    
  }   

     
     String[] alunos;
      alunos = new String[i];
     int[][] media = new int [3][i];
     int[] soma = new int [i];
     int[]soma2 = new int[i];   
       
     //Nome dos alunos  
    for (int y = 0; y < i; y++){  
         alunos[y] = JOptionPane.showInputDialog(null, y+1 + ") Nome: ", "Registro",1);  
     }  
       
       
     //Notas dos Alunos  
     JOptionPane.showMessageDialog(null,"Informe as 3 notas do trimestre dos alunos","Alunos",2);  
    for (int l = 0; l < i; l++){  
        JOptionPane.showMessageDialog(null,alunos[l]);  
      for (int c = 0; c < 3; c++) {  
          int localizador = c + 1;           
     String[][] media2 = new String[3][i];  
     media2[c][l] = JOptionPane.showInputDialog(null, "Nota " + localizador + ":");  
     media[c][l] = Integer.parseInt(media2[c][l]);  
      }  
}  
      
  
      
    // Somar as notas  
for (int v = 0; v < i; v++){  
        for (int y = 0; y < 3; y++) {  
            soma2[v] += media[y][v];  
       }  
 }  
for (int y = 0; y < i; y++)  
soma[y] = soma2[y];  
  
  
    //Mostrar as notas  
JOptionPane.showMessageDialog(null,"As notas dos alunos são: ");  
    for (int quantidade = 0; quantidade < i; quantidade++){  
        if (soma[quantidade] >= 18 && soma[quantidade] <= 30){  
            JOptionPane.showMessageDialog(null,alunos[quantidade] + " = " + soma[quantidade] + "   Aprovado");  
        } else if (soma[quantidade] > 30) {  
           JOptionPane.showMessageDialog(null,alunos[quantidade] + " = " + soma[quantidade] + "   Typing Error");  
        } else {  
            JOptionPane.showMessageDialog(null,alunos[quantidade] + " = " + soma[quantidade] + "   Reprovado");  
        }  
        }  
    }  
}
Criado 28 de agosto de 2014
Ultima resposta 30 de ago. de 2014
Respostas 6
Participantes 4