扫描仪询问更多预期的字符串

时间:2012-02-18 21:50:47

标签: java java.util.scanner

我正在尝试使用Scanner输入字符串。 但它问我更多的字符串:不应该用这个代码问5个字符串吗?

public void go()
{
    Scanner sc=new Scanner(System.in);
    ArrayList<String> list=new ArrayList<String>();
    String temp=new String();
    Integer i=new Integer(0);
    while(sc.hasNextLine() && i<5)
    {
        temp=sc.nextLine();
        list.add(list.size(),temp);
        i++;
    }
}

如果我尝试运行它,它会在控制台停止输入之前询问我6个字符串。 但是我在开始时是零,它在变为5之前增加了5次。 那么为什么当我5岁的时候它仍然存在?

解决:两种方法都解决了这个问题。

2 个答案:

答案 0 :(得分:4)

您对代码的执行存在误解。 它会询问您6个字符串,但会将5个字符串添加到列表中。 它再次询问你一个字符串的原因是,sc.hasNextLine()被执行,它被评估为true,所以你看到控制台希望你输入一些东西,但是循环条件的第二部分来了: i<5,这会被评估为false,因此会跳过循环体,并且列表中有5个字符串。您可以通过在Eclipse或Netbeans或其他Java IDE中调试代码来查看这些内容。

为方便起见,简化了循环。从循环条件中删除sc.hasNextLine()

while( i < 5 )
{
   temp=sc.nextLine();
   list.add(list.size(),temp);
   i++;
}

答案 1 :(得分:1)

如果i == 5仍然调用sc.HasNextLine()。维修:

while (i < 5 && sc.hasNextLine())

P.S。做int i = 0;