循环和处理数据输入错误

时间:2016-05-28 18:15:57

标签: java

我正在尝试创建一个Java程序,允许用户输入任意数量的数字等级,然后计算MINMAX& Average。处理输入错误是让我感到困惑的地方。

我提出了两种不同的方法,第一种允许用户输入他们想要的等级数,直到用户输入标记-1。第二种方法提示用户事先输入等级数。

// APPROACH ONE:
double grade = 0;
while (grade != -1) {
    grade = input.nextDouble();
}

// APPROACH TWO:
System.out.println("Enter number of grades: ");
double num = input.nextDouble();
for (int i = 1, i <= num, i++) {           
    System.out.println("Enter grade: ");                
    double grade = input.nextDouble();
}

当输入参数外的字母时,我需要将消息合并到警告用户 - 字母,单词等。当我尝试实现这些错误处理循环时,我无法弄清楚如何让循环忽略错误的响应。

例如,在我的方法二中,如果用户输入3个成绩,然后输入89.593.4-1,我的程序就会结束,因为它认为{{1这是3个等级中的一部分。

我无法弄清楚如何让它识别-1,显示错误,然后再提示再输入3个。也许方法一会更容易,因为没有预定的等级数量。

2 个答案:

答案 0 :(得分:0)

为了解决这个问题,我通常使用while循环,它看起来像这样:

double num = input.nextDouble();
for (int i = 1, i <= num, i++) {
    System.out.println("Enter grade:  ");
    double grade = input.nextDouble();

    while(grade < 0.0 || grade > 100.0) {
        System.out.println("Invalid imput. Please reenter grade number " + n);
        grade = input.nextDouble();
    }
}

这将使用户进入一个他们无法离开的循环,直到他们输入0到100之间的数字,并且for循环中的n值在他们输入有效数字之前不会更新。

答案 1 :(得分:0)

要向用户发出警告消息,您可能希望尝试使用try/catch语句(异常处理),并将booleans作为while循环的控件。同时看到你的代码要求用户输入几个数字我假设你需要使用某种array/arraylist来帮助计算最小值/最大值/平均值。因此,您的代码可能会是这样的:

public static ArrayList<Double> getdouble(ArrayList<Double> a){
    boolean control = true;
    boolean control2 = true;
    double grade = 0;
    while (control == true){

        while (control2 == true){
            System.out.println("enter grade or -1 to end");
            Scanner input = new Scanner(System.in);
            try {
                grade = input.nextDouble();
                if (grade == -1){
                    control2 = false;
                    break;
                }
                a.add(grade);
            } catch (Exception e){
                System.out.println("error");
                    control2 = false;
            }
        } // end control2

        System.out.println("input Y to continue adding grades or any other button to exit");
            Scanner input2 = new Scanner (System.in);
            if (input2.nextLine().toUpperCase().equals("Y")){
                control2 = true;
            } else {
                control = false;
            }
    } //end control
    return a;
}

public static void main(String [] args){

    ArrayList<Double> x = new ArrayList<Double>();
    getdouble(x);
    System.out.println(x);
}