java 输入 ctrl_在Java中按Ctrl + Z后继续读取控制台输入

简短的回答是:

if (!input.hasNext())

input = new Scanner(System.in);

答案很长:

下面是代码,其中包含了稍后删除的注释,以便根据我的理解和解决方案来演示问题。

请注意,此演示仅适用于使用整数和^Z输入的工作。

复制出代码并保存到文件HN.java进行编译。

运行该程序,它将提示One。输入整数到您心中的内容,然后输入^Z退出循环。

将显示两个,然后显示问题中的NoSuchElementFound exception。这是因为^Z 在扫描程序对象input中仍然是,因此nextInt()方法失败。

第一个倾向可能是使用hasNext()来解释这个问题。因此,请继续取消注释/*Comment1并重新编译并再次运行。

现在你避免了这个例外,但程序一直持续到最后,跳过最初想要的nextInt()。

现在,取消注释/*Comment2,重新编译,然后再次运行。现在,程序将按照预期在两个提示符处等待。如果您在此输入一个整数,您将进入三提示以获取另一个条目。

但是,如果您再次在两次处输入^Z,程序将跳过下一个输入。要更正此问题,请取消注释/*Comment3,重新编译和运行,您将看到该程序适用于所有整数组合,并且^Z可用于各种输入。

现在,您可能想知道我为什么不重用!input.hasNext()中的/*Comment3解决方案。这是一个演示原因:

放回/*Comment3并取消注释/*Comment4,再次编译并运行。该程序在两个提示下输入^Z时效果很好,但是如果你在那里输入一个整数,你会看到系统在等待输入,但是没有提示三!

这是因为您输入的整数用于前面的nextInt(),因此当程序到达hasNext()时,它会停止并等待输入。

这里的教训是,当您知道队列中有!input.hasNext() 时,使用^Z,例如当它用于在此程序中转义while循环时原始海报的问题。否则,其他结构更适合。

hasNext()令人困惑。你必须记住,如果队列中没有,程序将停止并等待该点的输入。如果你不小心,这可能会搞砸你的提示。

import java.util.Scanner;

public class HN

{

public static void main(String args[])

{

Scanner input = new Scanner(System.in);

int temp = 0;

System.out.println("One");

while (input.hasNext())

{

temp = input.nextInt();

}

System.out.println("Two");

/*Comment2

if(!input.hasNext()) input = new Scanner(System.in);

Comment2*/

/*Comment1

if (input.hasNext())

Comment1*/

{

temp = input.nextInt();

System.out.printf("%d\n", temp);

}

/*Comment3

else input = new Scanner(System.in);

Comment3*/

/*Comment4

if(!input.hasNext()) input = new Scanner(System.in);

Comment4*/

System.out.println("Three");

if (input.hasNext())

{

temp = input.nextInt();

System.out.printf("%d\n", temp);

}

System.out.println("Four");

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值