我想在用户使用Scanner输入时验证数据类型(在我的情况下是“int”)。
我在下面写了代码。
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter size of an array...");
int n = 0;
// 1st block, n <= 100
do {
System.out.println("Capacity must be less than or equal to 100");
try {
n = scanner.nextInt();
} catch (InputMismatchException e) {
System.out.println("Enter only integers ");
}
} while (n > 100);
int[] arr = new int[n];
// block 2. Value must be greater than 0 and less than 10000
for (int i = 0; i < n;) {
do {
try {
arr[i] = scanner.nextInt();
} catch (InputMismatchException e) {
System.out.println("Enter only integer value");
}
} while (arr[i] > 10000 || arr[i] < 1);
i++;
}
scanner.close();
for (int i = n - 1; i >= 0; i--)
System.out.println(arr[i]);
}
}
问题是,在第一个块中,若我给字符,程序终止。“如何在验证失败时保持循环运行??”
在第二个块中,如果我给出非整数,它将无限运行,并显示消息“仅输入整数值”。
从调试中,我得出结论,在不等待输入的情况下,它采用之前提供的最后一个非int值。
为什么编译器取最后一个值??
有什么建议吗?
作为对davidxxx回答的补充:下面是使用Scanner.hasNextInt()方法的相同代码。
Scanner scanner = new Scanner(System.in);
System.out.println("Enter size of an array...");
while (!scanner.hasNextInt()) scanner.next();
int arrayLength = scanner.nextInt();
int[] arr = new int[arrayLength];
boolean arrayFull = false;
int index = 0;
System.out.println("Enter array values");
while (!arrayFull){
while (!scanner.hasNextInt()) scanner.next();
int value = scanner.nextInt();
if (value < 0 || value > 1000) {
System.out.println("Enter only integer value < 0 and > 1000");
continue;
}
arr[index++] = value;
if (index >= arrayLength){
arrayFull = true;
}
}
1) 将0
指定为用于获取用户输入的n
integer的默认值:int n=0
因此,如果输入触发了输入失配异常
,则进入while
语句,其中n
等于0
while(n
>
使用包装器 Integer : Integer n = null;
具有可空值的整数可以知道扫描程序中是否未接受任何值
更改while
语句条件以检查您的需求:
< code>while (n == null || n
2)对于第一种情况和第二种情况,如果输入与所需的类型不匹配(这里是int
值),则不会读取扫描仪中的当前令牌。
忽略此令牌以避免进入无限循环:
catch (InputMismatchException e) {
...
scanner.nextLine();
}
问题内容: 我有这样的标记: 我希望在用户在第二个输入中意外键入字母时显示跨度。简单吧?作为(可能)相关的问题,当用户移动第一滑块输入时,第二输入中的值消失。为什么?如果我从标记中删除,则不会发生这种情况。 明确说明:我希望用户在键入工具提示时立即看到错误,而无需执行任何“提交”操作。(我不希望实际上根本不需要使用该元素,但是所有相关的演示似乎都需要它。) http://jsfiddle.net/
问题内容: 我是这个C ++世界的新手,正在尝试为数字密码编写输入验证功能。这是我到目前为止所得到的: 对于不正确的值,它工作得很好,但在有效输入时不会中断循环。知道我在这里缺少什么吗?干杯!! James Kanze脚本的ErroR: 新代码: 使用 和 验证作为字符串 感谢所有人(尤其是James Kanze)的帮助。这件事在这里很有效。 那里还有进一步改进的空间吗?干杯!! 问题答案: 这看
问题内容: 因此,我几乎搜索了单词“ string”,“ python”,“ validate”,“ user input”等等的每个排列,但是我还没有找到一种适合我的解决方案。 我的目标是提示用户是否要使用字符串“ yes”和“ no”进行另一笔交易,我认为字符串比较在Python中是一个相当简单的过程,但是有些不起作用对。我使用的是Python 3.X,据我所知,输入应使用字符串而不使用原始输
我已经创建了一个控制台应用程序,现在开始将其转换为摇摆应用程序。我有一个问题,我搜索了很多次,但我没有找到任何答案。 我的应用程序有一个类来验证用户的输入,如果输入错误,它会向控制台发出错误消息。所以我尝试做的是,我有一个Jtextfield并验证这个输入,如果输入错误,它应该给我错误消息。 这是我的Input类,用户可以在其中编写 这是我的输出类方法 我只是想知道我可以使用输入类的验证,还是应该
这是我刚接触Python时就一直在阅读的一本书中的一些代码……这一部分按它应该的方式工作 我的困境是…我需要验证输入是什么…因此,如果用户输入的是一个字符串(比如“五”而不是数字),而不是q或数字,它会告诉他们“很抱歉,“五”是无效的。请重试…然后它会再次提示用户输入。我是Python新手,一直在为这个简单的问题绞尽脑汁 *更新**因为我没有足够的积分来为我自己的问题添加答案,所以我在这里发布这个
我正在使用IBM沃森助手,并尝试根据时间帧/跨度验证用户输入。我应该使用什么功能? 我正在使用方法来验证用户输入的过去和现在之间的时间框架,但它现在对我有效。如果我现在或今天输入沃森助手仍然认为这是过去... : 看起来“好像你以前想预约。再试一次。”正确的 我预计,如果用户现在或今天的输入可以使预订生效,如果用户输入过去的时间来响应 “就像你过去想预订一样。再试一次。” 所讨论的代码片段如下所示