如何使用 hasNext() 和 next() 方法

How to use the hasNext() and next() methods

提问人:B612 提问时间:11/24/2022 最后编辑:JonasB612 更新时间:5/23/2023 访问量:119

问:

我的目标是将单词与标准输入分开读取和打印,而不必将它们存储在数组或列表中。

我想要这个:

输入:日月云

输出: 日月云(每个字在不同的行中)

以下程序在打印“云”后继续等待。我不知道问题出在哪里

`

import java.util.Scanner;

class RandomWord{
    public static void main(String[] args){
        String palavra;
        Scanner s = new Scanner(System.in);
        while(s.hasNext()){
            palavra = s.next();
            System.out.println(palavra);
        }
    }
}

`

Java 字符串 循环 java.util.scanner

评论

2赞 Sotirios Delimanolis 11/24/2022
定义最后一个给定的单词
1赞 knittl 11/24/2022
好吧,你的循环条件是“无法读取另一个单词”,所以循环会一直循环,直到你结束输入。只要你输入单词,它就不会停止。希望你的程序什么时候停止?
0赞 B612 11/24/2022
我希望有一行包含单词,我希望程序在打印该行的最后一个单词后停止
0赞 Marek Borecki 11/24/2022
使用 .readLine()
1赞 Velho Kielen 11/24/2022
在这里查看 stackoverflow.com/questions/15183761/...

答:

1赞 Marek Borecki 11/24/2022 #1

您持续读取扫描仪。 您必须通过扫描仪循环读取。例如,调用 s.next() 3 次。 或者创建一些循环结束条件,例如文本“END”。

如果在一行中传递所有单词,请使用 .readLine()

评论

0赞 f1sh 11/24/2022
在此方案中,何时关闭输入流?
1赞 Marek Borecki 11/24/2022
没有干净的方法可以做到这一点。唯一的方法是使脏,例如,对某些特定字符串进行闭合循环
1赞 Marek Borecki 11/24/2022
将逻辑保留在 ifs 中并比较 Strings 不利于 OOP 目的。例如,如果用户传递“END”字符串,则此代码可以从循环中退出,或者它可能只是结束循环,或者 3 调用 s.next()
1赞 Marek Borecki 11/24/2022
@f1sh什么是OP代码?
1赞 access violation 11/24/2022
OP = 原始海报。在这个问题中,用户 B612。
0赞 Reilas 5/22/2023 #2

如果正在等待用户输入,则对 the 的调用将阻止。Scanner.hasNext

当您希望用户连续输入时,它很有用。

以下是完成任务的方法。

public static void main(String[] args) {
    Scanner s = new Scanner(System.in);
    String[] strings = s.nextLine().split(" +");
    for (String string : strings)
        System.out.println(string);
}

输出

sun
moon
cloud

这些名称在 Java 上下文中有些复杂。hasNextnext

迭代器也使用此术语,作为从源收集数据的一种方式。

这里的区别在于它是动态工作的,而像迭代器这样的东西在静态上下文中工作,并且已经有了值。Scanner