![]() |
1
3
当用户写入非数字的内容时,循环将中断。 |
![]() |
2
1
虽然(嗯)!=“z” 尽管您希望有一个“z”,为什么要做input.getint()?
您可能想查看
|
![]() |
3
1
如果要循环直到用户必须通过ctrl+z强制中断,那么只需执行
|
![]() |
4
1
TrueSoft的解决方案已经过时了。它可能对asker不起作用的原因有点超出了程序的范围。 这个程序适用于我:我在Linux下运行它,在一行中输入ctrl-d作为第一件事。ctrl-d是Linux的文件尾,与ctrl-z用于Windows的方式相同。程序完全停止运行。 Windows控制台(黑色的DOS框,不管你怎么称呼它)有一个褶皱:它逐行读取输入。在读取行之前,它不会看到ctrl-z,因此在看到ctrl-z之前,它需要一个回车键。 我不愿意为了尝试这个而启动Windows,但是我猜ctrl-z后面跟着enter键(就像在数字输入之后一样)会导致程序干净地停止。 有一种系统的方法使Java程序按字符进行工作,这样您就可以直接处理任何字符,并立即响应CTRL Z。但这是高级的东西,不属于这样的简单编程练习。我认为ctrl-z/enter是一种可以接受的结束程序的方法。 |
![]() |
5
0
你需要实施 KeyBindings . 然后,您可以根据按下的键决定退出。 |
![]() |
6
0
您在循环外部执行输入,它将只运行一次。 System.out.print("Please enter a number: "); num = input.nextInt(); 把上面的代码放到循环中。 因为您在循环中有一个系统,所以您还将了解控件是否进入了循环,显然它应该这样做。 另外,试试看 while(true) 我想知道,单独使用()是否有效。 |
![]() |
7
0
这看起来像是Deitel的《Java如何编程,第九版》中的练习6.16。 实际上,ctrl-z字符确实在Windows平台上结束输入,就像ctrl-d在大多数UNIX或Linux平台上结束输入一样。 此外,在程序的构造中也存在逻辑错误,表明扫描器方法和字节流中的系统(即控制台的标准输入)不被很好地理解。 在您发布的程序中,声明:
无条件执行。它将阻止执行,直到接收到某种输入。如果输入不是整数,它将引发异常。如果接收到的输入是整数,那么num将被分配整数值,输入流(input)中的整数将从输入流中丢弃。根据用户在点击结束输入行并将其放入系统的回车键之前输入的内容,输入行上可能还有剩余的内容,在扫描程序正在扫描的字节流中。 如果不将input.hasNext()放入while语句的测试条件中,而是将程序保留为已写入状态,则在nextint()处理整数后的输入流中有更多输入之前,它将一直阻塞。 一些答案建议使用键绑定作为解决方案。虽然这可能有效,但它会在几乎硬件级别上等待按键事件,并且对平台独立性不友好。这是爱丽丝梦游仙境中一个潜在的兔子洞,因为它必须弄清楚各种各样的事件处理和代码必须知道它在哪个平台上运行。使用hasNext()布尔值false返回来指示输入流的结束应该在任何平台上工作,并且将避免在几乎硬件事件级别上处理键盘和按键的潜在不可移植的gee-whiz代码。 以下程序执行您(和练习)想要的操作,如果用户在Windows平台上按ctrl-z或在Unix/Linux平台上按ctrl-d,而不必确定代码执行的平台,则将结束输入。
|