有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java循环和处理数据输入错误

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

我提出了两种不同的方法,第一种方法允许用户输入他们想要的分数,直到用户输入sentinel -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();
}

当输入参数之外的数字时,我需要合并消息来提醒用户——lettesr、words等。当我试图实现这些错误处理循环时,我不知道如何让循环忽略错误响应

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

我想不出如何让它识别-1,显示错误,然后提示再输入一个总数为3的条目。也许方法一会更容易,因为没有预先确定的分数


共 (2) 个答案

  1. # 1 楼答案

    为了解决这个问题,我通常使用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值直到他们输入一个有效的数字时才会更新

  2. # 2 楼答案

    要向用户发出警告消息,您可能需要尝试使用try/catch语句(异常处理),并将布尔值作为while循环的控件。此外,鉴于您的代码需要用户输入一些数字,我认为您需要使用某种array/arraylist来帮助计算min/max/avg。因此,您的代码可能是这样的:

    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);
    }