2011-11-08 66 views
0

在我的程序中,我必须从给定的字母等级和数字等级计算GPA。 在第一个对话框但是,如果我点击取消它给了我numberFormatException空错误,如果我键入字符串,它会给我NumberFormatException输入字符串错误。 我必须在我的程序中使用try-catch,并且我已经尝试过它了。无论如何,我可以使用try-catch方法处理这两个异常。我还希望用户能够接受地为字母等级和数字等级选项键入1和2没有别的。Java,如何处理JOptionPane NumberFormatException输入字符串和NumberFormatException:空错误?

以下是节目的代码:

import javax.swing.JOptionPane; 

class CalcGPA{ 

    public static void main (String [] args){ 

     String questionOfOptions = "What type of grade do you wish to enter?\n"; 
     String letterGradeOption = "Press 1- for letter (A,C,etc)\n"; 
     String numericGradeOption= "Press 2-for numeric(89,68,etc)"; 

     String message= questionOfOptions 
         +letterGradeOption 
         +numericGradeOption; 

     String endingMessage = "The corresponding GPA is"; 
     String calculatedGPA="0" ; 
     String randomString="kc;lc[ ams[xas"; 

     String userResponseString="0"; 
     int userResponseNumerical=0; 
     char characterValue='0'; 

     do { 
      userResponseString=JOptionPane.showInputDialog 
       (null, 
       message, 
       "GPA Calculator", 
       JOptionPane.OK_CANCEL_OPTION); 

      try { 
       userResponseNumerical= Integer.parseInt(userResponseString); 

      } catch(NumberFormatException.forInputString ex) { 
       System.exit(0); 
      } 

      userContinuationOption= JOptionPane.showConfirmDialog 
        (null, 
        "Do You Want to Continue? ", 
        "GPA Calculator", 
        JOptionPane.YES_NO_OPTION); 

      if(userContinuationOption==JOptionPane.NO_OPTION) { 
       System.exit(JOptionPane.NO_OPTION); 
      } 

      switch(userResponseNumerical){ 

       case 1: 
        String userGradeResponse = JOptionPane.showInputDialog 
                (null, 
                "Enter a Grade.", 
                "GPA Calculator", 
                JOptionPane.INFORMATION_MESSAGE); 

        if (userGradeResponse.equals("A")) { 
         calculatedGPA ="4.";       
        } else if (userGradeResponse.equals("B")) { 
         calculatedGPA=" 3."; 
        } else if (userGradeResponse.equals("C")) { 
         calculatedGPA=" 2."; 
        } else if (userGradeResponse.equals("D")) {  
         calculatedGPA=" 1."; 
        } else if(userGradeResponse.equals("F")) { 
         calculatedGPA=" 0."; 
        } else { 
         JOptionPane.showMessageDialog 
          (null, 
          "Improper input ", 
          "Error", 
          JOptionPane.ERROR_MESSAGE); 
         break; 
        } 
        JOptionPane.showMessageDialog 
         (null, 
         endingMessage+" "+calculatedGPA, 
         "GPA Calculator", 
         JOptionPane.INFORMATION_MESSAGE); 
        break; 

       case 2:      
        String userNumericString= JOptionPane.showInputDialog 
               (null, 
               "Enter a Numeric Grade.", 
               "GPA Calculator", 
               JOptionPane.INFORMATION_MESSAGE); 

        int userNumericGradeResponse=0; 
        Integer.parseInt(userNumericString); 

        if(userNumericGradeResponse>=80) { 
         calculatedGPA=" 4."; 
        } else if (userNumericGradeResponse>70) { 
         calculatedGPA=" 3."; 
        } else if (userNumericGradeResponse>60) { 
         calculatedGPA=" 2."; 
        } else if (userNumericGradeResponse>50) { 
         calculatedGPA=" 1."; 
        } else if(userNumericGradeResponse>=0 && 
          userNumericGradeResponse<50) { 
         calculatedGPA=" 0."; 
        } 

        break; 

       default: 
        JOptionPane.showMessageDialog 
         (null, 
         "Improper input", 
         "Error", 
         JOptionPane.INFORMATION_MESSAGE); 
        break; 
      } 

      int userContinuationOption = JOptionPane.showConfirmDialog 
              (null, 
              "Do You Want to Continue? ", 
              "GPA Calculator", 
              JOptionPane.YES_NO_OPTION); 

      if(userContinuationOption==JOptionPane.NO_OPTION) { 
       System.exit(JOptionPane.NO_OPTION);} 
      } 

      while(true); 
     } 
    } 
+1

在另一个catch块中做同样的事情?虽然系统出口似乎有点苛刻。接受性?这是一个强大的方法! –

回答

0

不是100%肯定你正在尝试做的,而是用try/catch块,只要你喜欢,你可以捕捉尽可能多的例外和不同的方式处理它们所以:

try { 
    do.something(); 
catch(NumberFormatException e){ 
    handleexception(e); 
}catch(IOException e){ 
    handleexception(e); 
}catch(Exception e){ 
    blow.up(); 
} 

等等等等。您应该能够在不同的块中捕获每种异常类型。但你也可以赶上NumberFormatException,然后检查那里的种类。希望这有助于

+0

我只学过单一的try和catch(只有一个catch块),如果我想停止空错误,当用户取消JOptionPane以及给他们输入字符串时的消息,我该怎么办?它们都是同一类型的例外。 – user1036587

+0

你需要改变你的想法,你不应该使用try catch来处理null,而是处理它: 'if(userResponseNumerical!= null){ letsTry.dosomething(); } else {//必须为空 System.exit(0); }' 尝试着解决这个问题。 (抱歉不能让代码正确显示) –

相关问题