目录
正确答案
空白
解决方案2
首页 Java 用户填充的数组列表的永无止境的循环

用户填充的数组列表的永无止境的循环

Feb 05, 2024 pm 10:00 PM
overflow

问题内容

我需要编写一个方法来获取用户输入的汽车规格并将它们添加到 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中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

比特币诞生至今价格2009-2025 最全的BTC历史价格汇总 比特币诞生至今价格2009-2025 最全的BTC历史价格汇总 Jan 15, 2025 pm 08:11 PM

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

比特币诞生至今历史价格总览 比特币历史价格趋势大全 比特币诞生至今历史价格总览 比特币历史价格趋势大全 Jan 15, 2025 pm 08:14 PM

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

比特币诞生至今历史价格一览 BTC历史价格行情趋势图(最新汇总) 比特币诞生至今历史价格一览 BTC历史价格行情趋势图(最新汇总) Feb 11, 2025 pm 11:36 PM

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

2018-2024年比特币最新价格美元大全 2018-2024年比特币最新价格美元大全 Feb 15, 2025 pm 07:12 PM

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

如何通过CSS自定义resize符号并使其与背景色统一? 如何通过CSS自定义resize符号并使其与背景色统一? Apr 05, 2025 pm 02:30 PM

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

如何使用CSS的clip-path属性实现分段器的45度曲线效果? 如何使用CSS的clip-path属性实现分段器的45度曲线效果? Apr 04, 2025 pm 11:45 PM

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

比特币诞生至今历史价格明细最全汇总(2025年最新版) 比特币诞生至今历史价格明细最全汇总(2025年最新版) Feb 15, 2025 pm 06:45 PM

比特币历史价格重要节点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

Flex布局下文字超出省略却撑开容器?如何解决? Flex布局下文字超出省略却撑开容器?如何解决? Apr 05, 2025 pm 11:00 PM

Flex布局下文字超出省略导致容器撑开的问题及解决方法在使用Flex...