Java程序计算意味着异常

时间:2017-10-17 05:36:52

标签: java exception

编写一个计算N个整数平均值的程序。程序应提示用户输入N的值,然后必须输入所有Nnumbers。如果用户输入N的非正值,则应抛出(并捕获)异常,并显示消息“N必须为正”。如果用户输入N个数字时出现任何异常,则应显示错误消息,并提示用户再次输入该号码。如果用户未输入整数,程序必须请求使用重新输入值。

我是否正确抛出异常?

import java.util.Scanner;
import java.util.InputMismatchException;

class Playground {
    public static void main(String[ ] args) {
        int sum = 0, mean;
        System.out.println("Please enter number of integers");
        Scanner sc1 = new Scanner(System.in);
        int counter = sc1.nextInt();

        if ( counter <= 0 ) {
            throw new InputMismatchException("N must be positive");
        }
        else {
            System.out.println("Please enter "+counter+" numbers");
        }

        for (int i =0; i< counter; i++) {
            int inputnum = sc1.nextInt();
            if ( inputsum <= 0){
                throw new InputMismatchException("Please enter again");
                continue;
            }
            sum = sum+inputnum;
            System.out.println();
        }


        mean = sum/counter;

        System.out.println(mean);

    }
}

2 个答案:

答案 0 :(得分:2)

由与查询异常类匹配的最内层的try/catch语句捕获引发异常。 在这种情况下,try/catch语句不在主方法之内。 换句话说,当抛出异常时,它会被外部捕获到主函数,并且程序将完成。

当我们在被调用函数内部出现错误时,异常特别有用,我们需要绕过返回值向调用者报告,然后不需要为错误保留值。

在这一行。

throw new InputMismatchException("Please enter again");
continue;
控件永远不会触及

continue,因为throw(就像return)使控件离开方法。

如果您使用简单的throw替换System.out.println来描述问题,那么您的程序将按预期运行。

编辑,因为您需要一个具体示例,请考虑您的for声明。您使用Scanner#nextInt()获取下一个号码。 如果IllegalStateException完成输入源,它可能会抛出Scanner?然后:

try {
     for (int i =0; i< counter; i++) {
               /* … */
     }
} catch (IllegalStateException ex) {
     System.err.println(ex.getMessage());
}

如果发生任何IllegalStateException,这会使控件跳转到catch子句中,使其不费力地退出for语句。

答案 1 :(得分:0)

这样更好还是有问题?

import java.util.Scanner;
import java.util.InputMismatchException;
import java.util.NoSuchElementException;
import java.util.IllegalStateException;

public class Calculator{
    public static void main(String[] args){
        int sum =0, mean;
        System.out.println("Please enter no.");
        Scanner sc1= new Scanner(System.in);
        int counter = sc1.nextInt();
        if ( counter <=0){
            throw new InputMismatchException("not valid no.");
        }
        else {
            try {
                for (int i = 0;i<counter;i++){
                    int inputsum= sc1.nextInt();
                    sum = inputsum+sum;
                    System.out.println();
                }
                mean = sum/counter;
                System.out.println(mean);
            }
            catch(IllegalStateException | NoSuchElementException | InputMismatchException e){
                System.err.println(e.getMessage);
            }
        }
        catch(InputMismatchException e) {
            System.out.println(e.getMessage);
        }
    }
}