用户填充的数组列表的永无止境的循环
我需要编写一个方法来获取用户输入的汽车规格并将它们添加到 arraylist 中。这需要接受用户想要输入的任何数量的规格,包括没有。 这是我在这里发表的第一篇文章,对于任何错误的语法表示歉意。
public static arraylist gettrim() { scanner t = new scanner(system.in); system.out.println("enter car trim"); arraylist<string> trim = new arraylist<>(); while (t.hasnext()) { trim.add(t.next()); } return trim; }
我认为如果输入空格,这个条件将返回 false。如此不断迭代,只能手动退出。
我也尝试过
if (t.hasNext()) { trim.add(t.next()); } else { t.close(); }
这会迭代一次,然后返回 arraylist,但我需要能够输入更多内容。将 if 或 while 条件更改为 hasnextline() 会得到相同的结果,这里我使用 hasnext() 因为汽车装饰级别具有特定的格式期望。我不明白为什么当没有给出输入时 hasnext() 不会返回 false。
正确答案
它..没有。
想一想。计算机如何区分正在考虑要输入什么内容并可能留到午饭后再输入的用户和已“完成”的用户?启动网络摄像头并进行一些人工智能分析,看看用户是否看起来觉得自己已经完成了打字?
system.in
不是键盘。它是“jvm 进程的标准输入”,默认,至少,如果您从命令行启动 java 应用程序,请设置为从键盘读取。它不一定是:
java -jar myapp.jar </some/path/to/some/file.txt
现在 system.in
从该文件中读取。无法从键盘读取该过程。
java -jar myapp.jar </dev/barcodescanner1
现在,大概只要您扫描条形码,java 应用程序就会收到该条形码,就像您输入该条形码的数字并按“回车”1 一样。
这取决于“此输入的来源”到“结束”。当到达文件末尾时文件结束。
键盘不可能“结束” - 因此,.hasnext()
不可能返回 false
。
空白
您在评论中谈到“输入空格”。
那你就不懂scanner
。你们有很好的伙伴;这可能是最容易被误解的事情。如果我们从 stackoverflow 中充斥的问题数量来看,确实如此。
scanner
与键盘无关。
扫描仪只获取任何文本输入源并将其分割成块。块称为“令牌”,“令牌”由“分隔符之间的所有文本”定义。分隔符又由正则表达式定义,默认情况下使用的正则表达式是 s+
。例如,任意数量的空白。
因此:
public static void main(string[] args) { scanner s = new scanner(system.in); while (true) { system.out.println("token: ≥" + s.next()) + "≤"); } }
如果您运行该命令,并在命令行中输入:hello world!
,然后按 enter 键,并输入 my name is lajos
,您将看到:
token: ≥hello≤ token: ≥world!≤ token: ≥my≤ token: ≥name≤ token: ≥is≤ token: ≥lajos≤
关于扫描仪的事情:不可能注册或以其他方式获取“分隔符”下的任何内容的内容。你不能问扫描仪:有多少空白?
你也不能问:当你遇到空格时请“停止”。不,空格只是将一个标记与下一个标记分开。对于扫描仪来说,按 enter 键和按空格键然后按 enter 键之间没有任何区别。这都是“1 个或多个空白字符”,因此可以互换,并且因为这是关于分隔符的,所以无法检测到。
您可能根本不想使用扫描仪。 system.in 本身当然可以区分它。
解决方案1
通常的策略是在提示中提及一些表示“完成”的神奇词。例如:
static void main(string[] args) throws exception { var s = new scanner(system.in); system.out.println("welcome to the fruit stand! enter the fruit you'd like to buy, one at a time:"); var basket = new arraylist<string>(); while (true) { system.out.print("fruit (type 'done' when done): "); string fruit = s.next(); if (fruit.equalsignorecase("done")) break; basket.add(fruit); } system.out.println("here's your basket: " + basket); }
解决方案2
沟渠扫描仪。或者至少,放弃所有内容并仅使用 nextline
,它与它拥有的所有其他方法的交互nextline
,它与它拥有的所有其他方法的交互非常 - 选择一个且仅一个(nextline
,或除 nextline
非常
nextline
,或除 nextline
之外的所有内容):
static void main(string[] args) throws exception { var s = new scanner(system.in); system.out.println("welcome to the fruit stand! enter the fruit you'd like to buy, one at a time:"); var basket = new arraylist<string>(); while (true) { system.out.print("fruit (enter when done): "); string fruit = s.nextline(); if (fruit.isempty()) break; basket.add(fruit); } system.out.println("here's your basket: " + basket); }
/dev
[1] 实际上,大多数条形码扫描仪的外观和行为都像键盘,并且没有设备,因为它不存在于 / 无法通过管道传输到这样的进程中。但是,作为一个例子,它是有效的。你可以尝试这个:🎜
public static ArrayList getTrim() { Scanner t = new Scanner(System.in); System.out.println("Enter car trim"); ArrayList<String> trim = new ArrayList<>(); while (t.hasNext()) { if (!t.next().trim().equals("") { trim.add(t.next()); } else { t.close(); } } return trim; }
以上是用户填充的数组列表的永无止境的循环的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

自 2009 年问世以来,比特币成为加密货币界的领头羊,其价格经历了巨大的波动。为了提供全面的历史概述,本文汇集了从 2009 年到 2025 年的比特币价格数据,涵盖了重大的市场事件、市场情绪变化和影响价格走势的重要因素。

比特币,作为一种加密货币,自问世以来经历了显着的市场波动。本文将提供比特币自诞生以来的历史价格总览,帮助读者了解其价格趋势和关键时刻。通过分析比特币的历史价格数据,我们可以了解市场对其价值评估、影响其波动的因素,并为未来投资决策提供依据。

比特币自 2009 年创世以来,价格经历多次大幅波动,最高涨至 2021 年 11 月的 69,044.77 美元,最低跌至 2018 年 12 月的 3,191.22 美元。截至 2024 年 12 月,最新价格突破 100,204 美元。

实时比特币美元价格 影响比特币价格的因素 预测比特币未来价格的指标 以下是 2018-2024 年比特币价格的一些关键信息:

CSS自定义resize符号的方法与背景色统一在日常开发中,我们经常会遇到需要自定义用户界面细节的情况,比如调...

如何实现分段器的45度曲线效果?在实现分段器的过程中,如何让点击左侧按钮时右侧边框变成45度曲线,而点�...

比特币历史价格重要节点2009 年1 月 3 日:创世区块生成,第一个比特币产生,价值为 0 美元。10 月 5 日:第一笔比特币交易,一名程序员用 10,000 比特币购买了两个披萨,相当于 0.008 美元。2010 年2 月 9 日:Mt. Gox 交易所上线,成为比特币早期交易的主要平台。5 月 22 日:比特币首次突破 1 美元。7 月 17 日:比特币价格暴跌至 0.008 美元,触及历史低点。2011 年2 月 9 日:比特币价格首次突破 10 美元。4 月 10 日:Mt. Go