Java,在 do-while 循环结束时不注册用户输入

标签 java input while-loop

我有这个代码:

import java.util.*;

public class MyAccount {
    public static double balance = 0.0;

    public static double deposit(double deposit){
        return balance += deposit;
    }
    //public void setBalance(double balance){
    //  this.balance = balance;
    //}
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String redo = "";
        do{
        System.out.println("What do you want to do today?");
        String answer= in.nextLine();
        if(answer.equals("deposit")){
            System.out.println("How much do you want to deposit?");
            double money = in.nextDouble();
            deposit(money);
        }
        System.out.println("Your balance is " + balance);
        System.out.println("Anything else(Y or N)?");
        redo = in.nextLine().toUpperCase();
        } while(redo.equals("Y"));
    }
}

该程序直到最后都运行良好。如果我将钱存入其中并到达“还有其他(Y 或 N)吗?”这一行。之后我无法输入任何内容;即使我有 redo串在那里。不过如果我不存钱,我可以输入redo的东西并且可以让程序循环。我该如何修复它,以便即使我存入一些东西它也会循环?

最佳答案

原因有点棘手。这是因为在调用in.nextDouble()之后,用户的\n仍然在输入流中,这样redo就会当您调用 redo = in.nextLine().toUpperCase() 时等于空字符串。要修复它,请添加 in.nextLine() ,如下所示:

    if(answer.equals("deposit")){
        System.out.println("How much do you want to deposit?");
        double money = in.nextDouble();
        in.nextLine();
        deposit(money);
    }

或者另一种选择是:

    if(answer.equals("deposit")){
        System.out.println("How much do you want to deposit?");
        double money = Double.parseDouble(in.nextLine());
        deposit(money);
    }

关于Java,在 do-while 循环结束时不注册用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36144020/

相关文章:

java - 内部错误 (javaClasses.cpp :129)

java - 哪一项指示了 java 应用程序的确切内存使用情况

php - for循环只循环一次

angular - 使用变量名进行错误检查的语法

python - 乘以 2 列,直到获得所需的值

Javascript 数组在 Pop 循环时插入内部

java - 在 Java 中反转字符,同时保留一些字符

java - 在服务器上验证 JavaScript 代码

javascript - 如何在javascript中同时输入小数和带有千位分隔符的自动格式?

android - 如何更改屏幕上的文本选择小部件?