import java.util.Scanner;
public class mainClass{
static public Scanner keyboard = new Scanner(System.in);
public static void main (String [ ] args)
{
anotherMethod();
}
static public void anotherMethod()
{
String sentence;
String answer;
do{
System.out.println("Lets read a sentence: ");
String Sentence = keyboard.nextLine();
System.out.println("The sentence read: " + sentence);
System.out.println("Do you want to repeat?");
answer = keyboard.next();
} while (answer.equalsIgnoreCase("yes");
}
}
结果是,在第一次运行后,程序显示"Lets read a sentence:"
和"The sentence read: "
而不让我输入句子..
我想知道解决这个问题的简单方法。
答案 0 :(得分:1)
以下是正在发生的事情:程序使用nextLine
读取输入,然后提示是/否,此时键入yes
,然后按 Enter 。现在Scanner
的缓冲区包含以下四个字符:
'y' 'e' 's' '\n'
当您致电next()
时,Scanner
会读取最多为'\n'
的字符作为分隔符。字母将从缓冲区中删除,因此"yes"
成为next()
的结果。但是,'\n'
未被拍摄!它留在缓冲区中进行下一次Scanner
调用。
现在循环进入下一次迭代,程序会提示输入更多内容,然后调用nextLine()
。还记得缓冲区中的'\n'
吗?这就是你的程序将立即阅读,结束输入。
您可以通过调用next()
替换nextLine()
的来电来解决此问题。
答案 1 :(得分:0)
您还需要使用nextLine()
方法收集answer
字符串。
answer = keyboard.nextLine();
否则,next()
调用只会返回字符串yes
,但会留下悬挂在后面的新行字符,会在while
循环的下一次迭代中进行扫描,而不会让您有机会输入一些东西。