如何使用 Scanner 获取 String 和 int 与仅获取 String?

问题描述 投票:0回答:1

我有一些代码,可以根据用户的输入运行两个数字的加法或减法,其中他们可以输入一个字符串,后跟一个整数来执行操作,或者只输入一个字符串来关闭程序。

我的代码如下所示:

private static int result = 0;

public static void main(String[] args){
  Scanner kb = new Scanner(System.in);
  String operation = "";
  int num = 0;
  boolean finished = false;
  
  while(!finished){
    System.out.println("Enter the operation you'd like to perform on " + result + " or type q to quit.");
    operation = kb.next();
    if(kb.hasNextInt()){ num = kb.nextInt(); } //The problem
    
    switch (operation){
      case "add":
        add(num);
        break;
      case "subtract":
        subtract(num);
        break;
      case "q":
        finished = true;
        break;
    }
    System.out.println("New result: " + result);
  }
  System.out.println("Bye!");
}

public static void add(int num){
  result += num;
} 
public static void subtract(int num){
  result -= num;
} 

在我的程序中,用户可以输入“add 3”来将 3 添加到结果中, 或者“subtract 7”从结果中减去7,但是输入“q”只会提示用户继续输入,而不是按预期关闭程序。我希望

if(kb.hasNextInt())
方法能够检测用户是否输入了整数,并且仅在输入时才运行
num = kb.nextInt()
,但情况似乎并非如此。输入“q”应该关闭程序,但它会继续搜索输入。如果字符串后面没有 int,我怎样才能告诉我的程序不要寻找 int?

我考虑将整个输入作为字符串并使用 .split() 来提取 int,但这似乎是一个糟糕的解决方案,我确信一定有一些我没有想到的更简单的方法。如有任何帮助,我们将不胜感激!

java string integer java.util.scanner
1个回答
-1
投票

尝试更改您的代码如下

    if(kb.hasNextInt())
    { num = kb.nextInt(); }
    else
    {kb.next();continue;}

hasNextInt
仅检查输入,并不实际处理它们。所以你需要使用
next
来跳过之前的输入。

© www.soinside.com 2019 - 2024. All rights reserved.