【问题标题】:Why can i input anything for my operation?为什么我可以为我的操作输入任何内容?
【发布时间】:2013-05-22 19:26:27
【问题描述】:

所以我正在尝试用 java 制作一个简单的计算器,但不知道如何获取哪个操作的输入。程序要求输入两个数字,然后要求操作员。当我运行它时一切正常,直到我进入操作类型。编译器只是跳过它,甚至不让我为它输入任何内容。有什么线索吗?

Scanner keyboard = new Scanner(System.in);

double x;
double y;
double sum =0;
double minus =0;
double times =0;
double divide =0;
double nCr =0;
String Op;

System.out.print("X: ");
x = keyboard.nextDouble();
System.out.print("Y: ");
y = keyboard.nextDouble();
System.out.print("Op: ");
Op = keyboard.nextLine();

【问题讨论】:

标签: java string calculator


【解决方案1】:

试试:

System.out.print("X: ");
x = Double.parseDouble(keyboard.nextLine());
System.out.print("Y: ");
y = Double.parseDouble(keyboard.nextLine());
System.out.print("Op: ");
op = keyboard.nextLine();

这会将您输入的数字解析为Double 并读取回车符。

如果你想要错误控制(如果用户输入的是字符串而不是数字):

Boolean check = true;

do
{
    try
    {
        //The code to read numbers
    }
    catch(InputMismatchException e)
    {
        System.err.println("Please enter a number!");
        check = false;
    }
}
while(check == false)

【讨论】:

  • 非常感谢!它有效,但我不清楚为什么会这样。 parse 到底是做什么的?
  • keyBoard.nextLine() 会将输入读取为String,然后Double.parseDouble 将尝试将String 解析为Double。如果它不能解析它,它会在用户输入不是数字的东西时抛出InputMismatchException(例如:用户输入'Hello')。
【解决方案2】:

代替

Op = keyboard.nextLine();

尝试使用

Op = keyboard.next();

看起来像 nextLine();当使用 nextInt()、nextDouble() 等方法调用时,方法会给您带来问题。

观察:如果 nextLine() 被单独调用,这不会发生。

【讨论】:

    【解决方案3】:

    基本上nextDouble 无法识别回车。在每个 nextDouble 之后使用 nextLine

    【讨论】:

      猜你喜欢
      • 2021-10-01
      • 2017-05-02
      • 2016-04-21
      • 2022-06-15
      • 2010-10-28
      • 1970-01-01
      • 1970-01-01
      • 2021-04-08
      • 1970-01-01
      相关资源
      最近更新 更多