2012-02-18 34 views
0

我正在尝试使用扫描仪在输入中输入字符串。 但它问我更多预期的字符串:不应该与此代码问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岁的时候,为什么它还会留在原地呢?

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

回答

1

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

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

P.S.做int i = 0;

+0

这是怎么修复的? – 2012-02-18 22:08:11

+0

@HovercraftFullOfEels如果我达到5,我会<5将是假的,并在调用sc.hasNextLine()之前结束while循环。已经有sc.hasNextLine在读取时进行读取。 – 2012-02-18 22:35:08

+0

这解决了这个问题。 – 2012-02-19 19:26:51

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++; 
} 
+0

有解决方案,1+。甚至更好:使用for循环。这就是他们的目的。 – 2012-02-18 22:11:28