扫描仪询问更多预期的字符串
我正在尝试使用扫描仪在输入中获取字符串。 但它询问了我更多预期的字符串:这段代码不应该询问 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 个字符串。 但 i 一开始是零,它会增加 5 次才变成 5。 那么为什么当 i 是 5 时它还保留在 while 中呢?
已解决:两种方法都解决了问题。
I'm trying to take string in input using Scanner.
But it asks me more strings that expected: shouldn't with this code ask 5 strings?
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++;
}
}
If I try to run it it asks me 6 strings before the console stops to take input.
But i at the beginning is zero, it gets incremented 5 times before becoming 5.
So why it also remain in while when i is 5?
Solved: Both methods solved the problem.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您对代码的执行有误解。
它询问您 6 个字符串,但将其中 5 个添加到列表中。
它要求您再输入一个字符串的原因是,执行了
sc.hasNextLine()
,它的计算结果为true
,因此您会看到控制台正在等待您输入一些内容,但是循环条件的第二部分出现了:i<5
,它的计算结果为false
,因此循环体被跳过,列表中有 5 个字符串。您可以通过在 Eclipse 或 Netbeans 或其他 Java IDE 中调试代码来查看这些操作的实际情况。只是为了方便简化你的循环。从循环条件中删除
sc.hasNextLine()
。You have a misunderstanding on your code's execution.
It asks you 6 strings but adds 5 of them to the list.
The reason it asks you one more string is that,
sc.hasNextLine()
is executed, it's evaluated totrue
, so you see the console is expecting you to enter something, but then 2nd part of the loop condition comes:i<5
, this is evaluated tofalse
so the loop body is skipped and you have 5 strings in your list. You can see these in action by debugging your code in Eclipse or Netbeans or another Java IDE.Just for convenience simplify your loop. Remove
sc.hasNextLine()
from loop condition.如果
i == 5
仍然调用sc.HasNextLine()
。修复:PS do
int i = 0;
If
i == 5
still asc.HasNextLine()
is called. Repair:P.S. do
int i = 0;