使用 hasNext 方法检查两个变量时出现问题

Posted

技术标签:

【中文标题】使用 hasNext 方法检查两个变量时出现问题【英文标题】:Issues while error checking two variables with hasNext method 【发布时间】:2017-02-27 05:58:58 【问题描述】:

我正在学习 Java 课程,但我被困在使用 hasNext 命令错误检查两个用户输入的变量以确保它们是数字的分配上。这是我目前所拥有的。

扫描仪 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();

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

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

我打算只收到:

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

【问题讨论】:

这是因为您有一个要求“第一面”和“第二面”的大循环。如果你回到循环的开头,它会再次询问“第一面”,因为那是循环开头的内容。您的程序没有任何东西可以让它回到“第二面”问题。要解决这个问题,请将“第二面”输入代码放在自己的循环中。 为了扩展@ajb 所说的内容,continue 关键字将重复整个循环,而不仅仅是再次询问第二个变量。因此,如果您为第二个值输入非双精度值,它会将您送回起点。您可以将第二个输入问题放入自己的循环中,也可以将其放入 do/while 循环中。 【参考方案1】:

那是因为您的第二条语句的continue; 使您的程序返回到 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
    

【讨论】:

我添加了您建议的更改,但我仍然遇到问题。我的控制台输出如下所示: 请输入直角三角形的两条边。输入第一面:g 请输入数值并重试。输入第一面:3 输入第二面:g 请输入数值并重试。输入第二面:请输入数值并重试。进入第二面:3 Hypotenuse = 4.242640687119285 你想继续吗?是/否? y 输入第一面: g 请输入数值并重试。输入第一面:请输入数值并重试。进入第一面: @mrgopher 这似乎是一个有效的输出。我可以看到您的程序从Enter Second Side 递归询问,直到提供有效输入。这不是你想要的吗? 我的问题是它会两次说明错误消息,并提示两次输入无效输入的边号。 @mrgopher 您能否更新您的问题并提供您期望的示例回复?

以上是关于使用 hasNext 方法检查两个变量时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

全局写入时出现分段错误

Linux使用退格键时出现^H解决方法

使用 SET(C++) 检查两个给定字符串是不是为字谜时出现运行时错误

使用条件变量多线程时出现意外行为

尝试在 Java 中使用静态变量时出现标识符异常

检查后在 SwiftUI 中将可选绑定设置为 nil 时出现异常