问题是这样的:
输入两个整数,求和。简单吧!
要求:
1.要有错误处理机制。
2.要能分别错误的不同类型,并且给出不同的错误信息。
3.要考虑以下三个错误,字符,小数还有越界。
不一定要有完整的程序,有个思路也好。
当然,能有完整程序的分值肯定不会低。
这不是昨夜也不是考试,我是一个java的初学者,碰到这样的例子,想了n旧都没想出来一个比较好的办法,所以想听听大家的意见。

解决方案 »

  1.   

    倒。这个try catch一下就可以了。cantch的时候分别捕捉不同的异常就可以了。详细代码自己研究着写吧,呵呵。实在没时间写了。就这么多
      

  2.   


    public static void main(String [] args) {
        BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
        boolean wrong = true;
        String input = null;    
        int leftNum = 0;
        int rightNum = 0;    do {
            wrong = true;
            System.out.print("输入左运算数: ");
            input = read.readLine();
            try {
                leftNum = Integer.parseInt(input);
            }
            catch (NumberFormatException e) {
                System.out.println("输入错误!");
                continue;
            }
            System.out.print("输入右运算数: ");
            input = read.readLine();
            try {
                rightNum = Integer.parseInt(input);
                wrong = false;
            }
            catch (NumberFormatException ee) {
                System.out.println("输入错误!");
                continue;
            }
        }while (wrong);
        System.out.println(leftNum + " + " + rightNum + " = " + (leftNum + rightNum));
            
        
            
    }
      

  3.   

    to:pauliuyou(paul) 
    看见你写的程序了,你可能没有明白我的意思。
    这样的程序我也写出来了
    但是问题是不能判断是那种输入错误。
    我要求的第二条说得很明白,对于不同的错误要给出不同的错误信息。
    比如:我输入了“a“,要显示“字符不能计算!”
          我输入了“0.5”,要显示“小数不能计算”
          我输入了“500000000000”,要显示“输入的数字过于大了。”
      

  4.   

    to:keke1(龙) ,shan1119(大天使) ,vvpang(NullPointerException)
    非常感谢你们的参与,你们如果有时间和经历的话,我请求你们也动手弄弄,问题可能没有你们想得那么简单。
    虽然没有达到我的要求,不过分我还是会给的。(说了见者有份么,如果人多的话我会在开一贴的,这个大家请放心。)
    多谢支持!
      

  5.   

    import java.io.*;
    public class Test

      public static void main(String[] args) 
     {  
        String s1 ="";
        String s2 ="";
        int num1 = 0;
        int num2 = 0;
        int sum = 0;
        double d1 = 0.0;
        double d2 = 0.0;
       
         try
        {     
        BufferedReader in= new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Please enter the 1st numer:");
        s1=in.readLine();
        System.out.println("Please enter the 2nd numer:");
        s2=in.readLine();
        }
        catch(IOException e)
        {
        System.out.println("In/Out Error!");
        System.exit(0);
        }//这里需要加入判断输入的字符串转换成int类型后是否会越界。     try
        {  
        d1 = Double.parseDouble(s1);
        d2 = Double.parseDouble(s2);
        }
        catch (NumberFormatException e)
        {
        System.out.println("文字ng!");
        System.exit(0);
        }
        //System.out.println(s1+"+"+s2+"="+sum);
         
        try
        {  
        num1 = Integer.parseInt(s1);
        num2 = Integer.parseInt(s2);
        }
        catch (NumberFormatException e)
        {
        System.out.println("pls enter Integer!");
        System.exit(0);
        }
            sum = num1+num2;
        System.out.println(num1+"+"+num2+"="+sum);    }
     
    }
      

  6.   

    上面是我写的一个,基本满足了要求,只有一个问题就是越界。
    谁能帮我想想怎么判断输入的字符串在转换成整形之后是否越界呢?
    越界的异常是那个啊?to: yanxiazhiqiu(if the words don't come my way...) 
    怎么写自己的异常呢,以前没听说过啊,能大概讲一下吗?
    同样也谢谢你的支持啊。
      

  7.   

    或者在捕获NumberFormatException里的代码块区分小数和字母,还有越界的情况,再分别打印错误提示。
      

  8.   

    import java.io.*;public class A15_HelloJava

      public static void main(String[] args) 
     {  
        String s1 ="";
        String s2 ="";
        int num1 = 0;
        int num2 = 0;
        int sum = 0;
        double d1 = 0.0;
        double d2 = 0.0;
       
         try
        {     
        BufferedReader in= new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Please enter the 1st numer:");
        s1=in.readLine();
        System.out.println("Please enter the 2nd numer:");
        s2=in.readLine();
        }
        catch(IOException e)
        {
        System.out.println("In/Out Error!");
        System.exit(0);
        }    try
        {  
        d1 = Double.parseDouble(s1);
        d2 = Double.parseDouble(s2);
        if(d1<-32768||d1>32767||d2<-32768||d2>32767)
          {
          System.out.println("it`s too big!");
          System.exit(0);
          }
        }
        catch (NumberFormatException e)
        {
        System.out.println("文字ng!");
        System.exit(0);
        }
       
        try
        {  
        num1 = Integer.parseInt(s1);
        num2 = Integer.parseInt(s2);
        }
        catch (NumberFormatException e)
        {
        System.out.println("pls enter a Integer!");
        System.exit(0);
        }
            sum = num1+num2;
        System.out.println(num1+"+"+num2+"="+sum);    }
     
    }这是我写的经过我的测试基本满足要求了,大家帮忙测试一下啊,看看还有没有什么漏洞。
    给一晚上时间测试吧,明天早上给分。
    谢谢各位的支持啊。
      

  9.   

    to*:SereinLi(吻星) 
    说得好,谢谢,我也发现了,呵呵!
    正在改呢!
    你的分不会少的了。其他人加油啊!
      

  10.   

    测试的热情不是很高么,是不是嫌分少啊?
    那可以把测试报告发到我的另一个贴上,
    那边因为我自己把那个问题解决了,所以剩下好多分。
    没地方去啊。http://community.csdn.net/Expert/topic/4400/4400138.xml?temp=.1768762
      

  11.   

    to:SereinLi(吻星) 
    你说的那个问题我都解决了,呵呵,谢谢你的提醒啊。
    你看看现在行了没啊?
    import java.io.*;
    //import java.text.*;
    public class A15_HelloJava

      public static void main(String[] args) 
     {  
        String s1 ="";
        String s2 ="";
        int num1 = 0;
        int num2 = 0;
        int sum = 0;
        double d1 = 0.0;
        double d2 = 0.0;
       
         try
        {     
        BufferedReader in= new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Please enter the 1st numer:");
        s1=in.readLine();    try
        {  
        d1 = Double.parseDouble(s1);
        if(d1<-32768||d1>32767)
        {
         System.out.println("The 1st num is  overflow !");
         System.exit(0);
        }
        }
        catch (NumberFormatException e)
        {
        System.out.println("No  character pls!");
        System.exit(0);
        }
        
        try
        {  
        num1 = Integer.parseInt(s1);
        }
        catch (NumberFormatException e)
        {
        System.out.println("Please enter a Integer!");
        System.exit(0);
        }
        
        System.out.println("Please enter the 2nd numer:");
        s2=in.readLine();    try
        {  
        d2 = Double.parseDouble(s2);
        if(d2<-32768||d2>32767)
        {
         System.out.println("The 2nd num is  overflow !");
         System.exit(0);
        }
        }
        catch (NumberFormatException e)
        {
        System.out.println("No character pls!");
        System.exit(0);
        }
        
        try
        {  
        num2 = Integer.parseInt(s2);
        }
        catch (NumberFormatException e)
        {
        System.out.println("Please enter a Integer!");
        System.exit(0);
        }
        }
        catch(IOException e)
        {
        System.out.println("In/Out Error!");
        System.exit(0);
        }
            sum = num1+num2;
        System.out.println(num1+"+"+num2+"="+sum);    }
     
    }
      

  12.   

    to liukang520236(天堂魔鬼) 
    这个我已经调试过了,能够分辨各种错误并进行相应处理。import java.io.*;
    class Sum {
        public static void main(String[] args) {
            int sum,num1,num2;
            try{
                System.out.println(" Please input the first number: ");
                num1 = input();
                System.out.println(" Please input the second number: ");
                num2 = input();
                sum = num1 + num2;
                System.out.println("Sum is: " + sum);
            }catch(Exception e){
                System.out.println("error is: " + e);
            }
        }    public static int input(){
            int i=0;
            double d = 0;
            String temp;
            boolean result = true;
            BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
            while(result){
                try {
                    temp = bf.readLine();
                    d = Double.parseDouble(temp);
                    if (d > 2147483647) {
                        System.out.println("输入的数字过于大了。请重新输入:");
                    }
                    else {
                        if (d < -2147483648) {
                            System.out.println("输入的数字过于小了。请重新输入:");
                        }
                        else {
                            try {
                                i = Integer.parseInt(temp);
                                result = false;
                            }
                            catch (NumberFormatException nfe) {
                                System.out.println("小数不能计算。请重新输入:");
                            }
                        }                }
                }
                catch (NumberFormatException ne) {
                    System.out.println("字符不能计算!请重新输入:");
                }
                catch (IOException ioe) {
                    System.out.println("IOException。默认输入为0。");
                    result = false;
                }
            }
            return i;
        }
    }
      

  13.   

    main()中增加如下,可以对结果进行判断。
    Exception numberfe = new Exception("out boundary!");
    .....
    if ((num1 > 0 && num2 >0 && sum <0) || (num1 < 0 && num2 <0 && sum >0)){
        throw numberfe;
    }
    System.out.println("Sum is: " + sum);