【发布时间】:2021-02-28 11:52:54
【问题描述】:
问题:
如何在 jshell 脚本 中获取用户输入?还是我做错了什么?
注意:我不是看how to pass arguments to jshell script。
示例:
例如脚本hello.java:
Scanner in = new Scanner(System.in);
System.out.print("Enter number n1: ");
int n1 = in.nextInt();
System.out.print("Enter number n2: ");
int n2 = in.nextInt();
System.out.println("n1 + n2 = "+ (n1 +n2));
/exit
如果我在 jshell 中逐行键入它会起作用,但是我运行 jshell hello.java 它不会。抛出java.util.NoSuchElementException。
我得到的输出:
@myMint ~/Java $ jshell hello.java
Enter number n1: | java.util.NoSuchElementException thrown:
| at Scanner.throwFor (Scanner.java:858)
| at Scanner.next (Scanner.java:1497)
| at Scanner.nextInt (Scanner.java:2161)
| at Scanner.nextInt (Scanner.java:2115)
| at (#3:1)
Enter number n2: | java.util.NoSuchElementException thrown:
| at Scanner.throwFor (Scanner.java:858)
| at Scanner.next (Scanner.java:1497)
| at Scanner.nextInt (Scanner.java:2161)
| at Scanner.nextInt (Scanner.java:2115)
| at (#5:1)
n1 + n2 = 0
我的系统:Linux Mint 18.2(x64),JShell 版本 9.0.1
【问题讨论】:
-
两种查看方式。如果我认为
int n1 = in.nextInt();之后的脚本中的输入是您手动输入的。如果从脚本中删除那些 Return(enter) 并将其作为单行运行,语句用分号分隔,会发生什么情况?但有趣的是,脚本与逐行的比较很高兴看到这里的区别,不要忘记throws NoSuchElementException - if input is exhausted -
@nullpointer 我正在考虑第一种方式。添加
in.hasNextLine()check(用于指向它的tnx)摆脱异常。但现在感觉我需要某种暂停(按住直到用户进入)..??第二种方式......我是一名学生(不是以英语为母语的人),它让我的大脑“很少”看到我刚刚读到的东西。我读了你的帖子几次,想想我刚刚读到的,尝试单行脚本(结果相同),再次阅读你的帖子,再想一想......仍然感到迷茫。我错过了吗?顺便说一句,感谢您的宝贵时间。