当前位置: 首页 > 知识库问答 >
问题:

使用hasNext方法错误检查两个变量时的问题

祁晟
2023-03-14

我正在学习一个Java类,我被困在一个赋值中,使用hasNext命令错误检查两个用户输入的变量,以确保它们是数值的。这就是我到目前为止所做的。

Scanner sc=new Scanner(System.in);

    String choice = "y";
    double firstside;
    double secondside;

    //obtain user input
    while (choice.equalsIgnoreCase("y")) {


    System.out.println("Enter First Side: ");
    if (sc.hasNextDouble()) {
        firstside = sc.nextDouble();

    } else {
        sc.nextLine();
        System.out.println("Please enter a numeric value and try again.");
        continue;
    }

    while (true){
    System.out.println("Enter Second Side: ");
    if (sc.hasNextDouble()) {
        secondside = sc.nextDouble();
        break;
    } else {
        sc.nextLine();
        System.out.println("Please enter a numeric value and try again.");
    }
    }

    //calculate results
    double hypotenusesquared = Math.pow(firstside, 2) + Math.pow(secondside, 2);
    double hypotenuse = Math.sqrt(hypotenusesquared);

    //display results
    String output = "Hypotenuse = " + hypotenuse;
    System.out.println(output);
    System.out.println("Would you like to continue? Y/N?");
    choice = sc.next();
}

} }

出现错误时,我收到的输出是:

请输入一个数值,然后重试。输入第一面:请输入一个数值,然后重试。输入第一面:

我打算只接收:

请输入一个数值,然后重试。输入第一面:

共有1个答案

葛勇锐
2023-03-14

那是因为继续;您的第二条语句的使您的程序返回到while循环的第一行(下一次迭代)。

为了克服它,您应该将第二侧扫描语句放在它自己的while循环中。类似于这样:

System.out.println("Enter Second Side: "); //move this inside below loop if you want to prompt user for each invalid input.

while(true) {
    if (sc.hasNextDouble()) {
        secondside = sc.nextDouble();
        break; //if we get double value, then break this loop;
    } else {
        sc.nextLine();
        continue; //you can remove this continue
    }
}
 类似资料: