如何在其他方法中使用公共静态扫描程序? (nextLine());

时间:2015-01-30 02:58:22

标签: java methods static

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: "而不让我输入句子..

我想知道解决这个问题的简单方法。

2 个答案:

答案 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循环的下一次迭代中进行扫描,而不会让您有机会输入一些东西。