import java.util.*;
public class three_one
{
   public static void main(String[] args)
     {
        Scanner keyboard = new Scanner(System.in);
        String answer;
        do
          { 
             String sentence;
             System.out.println("Please enter a one-line sentence:");
             sentence = keyboard.nextLine();
             System.out.println("sentence:"+ sentence);
             System.out.println("Do you want to enter another one-line sentence ?");
             System.out.println("Enter yes or no.");
             answer = keyboard.nextLine();
           }
        while(answer.equalsIgnoreCase("yes"));
      } 
}
这段代码是我做的练习题中截取出来的一部分。
我的问题是:两个都是nextLine(),运行正常,
            两个都是next(),运行正常,但不适用于句子,只适用于单词。
            前面一个是nextLine(),后面一个是next(),当answer是no是,正常,当answer是yes时,程序会自动运行,不给我输入的机会,并且输出的句子为空。
            前面一个是next(),后面一个是nextLine(), setence只输出一个单词,然后读到"enter yes or no" 时,程序就卡住了。

解决方案 »

  1.   

    nextline()读入一行文本,会读入"\n"字符,但"\n"并不会成为返回的字符
    串值的一部分加入如下代码
    int n = ScannerObjext.nextInt()
    String s1 = ScannerObjext.nextLine();
    String s2 = ScannerObjext.nextLine();
    假设输入:
    42
    and don't you
    forget it
    在这种情况下,n的值为42,s1设置为空白字符,s2设置为and don't you
    因为nextInt()读入42,但并没有读入"\n",因此S1调用42所在行的剩余部分结合不同的方法从键盘读取字符输入时,有时不得不包含一条额外的nextLine()调用,以去除行的结束符。
      

  2.   

    public String nextLine()
    此扫描器执行当前行,并返回跳过的输入信息。 此方法返回当前行的其余部分,不包括结尾处的行分隔符。当前位置移至下一行的行首。 
    因为此方法会继续在输入信息中查找行分隔符,所以如果没有行分隔符,它可能会缓冲所有输入信息,并查找要跳过的行。 public String next()
    查找并返回来自此扫描器的下一个完整标记。完整标记的前后是与分隔模式匹配的输入信息。