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

发布于 2025-01-07 02:42:45 字数 528 浏览 0 评论 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 个字符串。 但 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一紙繁鸢 2025-01-14 02:42:45

您对代码的执行有误解。
它询问您 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++;
}

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 to true, 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 to false 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.

while( i < 5 )
{
   temp=sc.nextLine();
   list.add(list.size(),temp);
   i++;
}
染墨丶若流云 2025-01-14 02:42:45

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

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

PS do int i = 0;

If i == 5 still a sc.HasNextLine() is called. Repair:

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

P.S. do int i = 0;

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文