扫描仪干扰另一个

时间:2017-03-23 20:03:33

标签: java

所以我试图创建一个代码,提示用户使用基本计算器,或者显示用户输入的给定句子中有多少单词的单词计数器,这是使用方法完成的。我已经想出如何正确设置计算器,但是单词counter给了我一些问题:

    public static int wordCounter(String str){

      String words[]=str.split(" ");
       int count=words.length;
        return count;
  }



public static void main(String[] args) {

   Scanner input = new Scanner(System.in);
   System.out.print("What do you want to do( calculator(0)/word counter(1) )? ");  
   //This runs and I select '1' for word counter
   int choice = input.nextInt();    //Input the choice here

   if (choice == 0) {     
   // It runs this selection statment, and since zero is not selected, 
   //it runs the word Counter branch
      calculator();
  }else{
     System.out.println("Please enter a sentence:");     // Tells me to enter a sentence
     String sentence=input.nextLine();  
    //^ This input is completely skipped and goes 
    //right to the 'System.out.print(); Statement.

    System.out.print("There are "+ wordCounter(sentence) + " words in the sentence.");     
    //^ This prints a 1 immediately after the branch is selected with '1'
}

}

我不确定它出错的地方,因为这只发生在if / else语句中。做一些测试也告诉我,似乎第一个扫描仪“int choice = input.nextInt()”以某种方式干扰了字符串的第二个扫描程序。任何保持类似格式的想法都将非常感激。

请原谅我的格式,它看起来可能不太好。

2 个答案:

答案 0 :(得分:1)

nextLine()只会返回正在扫描的当前行的剩余部分。由于您在选择数字后按下了输入,因此它将捕获的全部为空字符串。

要修复它,只需在获得整数后直接添加nextLine()

  

public String nextLine()

     

使此扫描程序超过当前行并返回跳过的输入。此方法返回当前行的其余部分,不包括末尾的任何行分隔符。该位置设置为下一行的开头。   由于此方法继续搜索输入以查找行分隔符,因此如果不存在行分隔符,它可以缓冲搜索要跳过的行的所有输入。

https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextLine()

答案 1 :(得分:0)

问题是,当您输入数字int choice = input.nextInt()时,它只扫描整数,而不是换行符。因此,当您调用input.nextLine()时,它会立即返回一个空字符串。解决这个问题的一种方法是用

替换该行
int choice = Integer.parseInt(input.nextLine());