我正在尝试创建一个简单的程序来验证用户的输入是否为正整数。但是,在使用Scanner.hasNextInt()方法时遇到了一个问题。如果输入包含一个整数,比如“5个6”,我的程序将把6读入为一个整数。但是,我希望这样的语句无效,并提示用户只需要输入一个整数值。因此程序将输出“请输入整数值:”。
这就是我的程序的样子:
import java.util.Scanner;
public class InputValidation {
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
// INPUT VALIDATION FOR INTEGERS AND POSITIVE NUMBERS
int input = 0;
boolean validationSuccessful = false;
System.out.print("Please enter the input: ");
do {
// validate that the input is an integer
if (in.hasNextInt() == true) {
input = in.nextInt();
} else {
System.out.print("Please enter an integer value: ");
in.next();
continue;
}
// validate that the input is positive
if (input < 0) {
System.out.print("Please print a POSITIVE integer: ");
continue;
} else {
validationSuccessful = true;
}
System.out.println("The input is: " + input);
} while (validationSuccessful == false);
}
}
编辑:我理解next()与nextLine()之间的区别。然而,我的问题是实际仅为整数的行与包含整数的行的验证方面。
int input = 0;
boolean intExist = false; //changes
boolean validationSuccessful = false;
System.out.print("Please enter the input: ");
do {
// validate that the input is an integer
if (in.hasNextInt() == true) {
input = in.nextInt();
intExist = true; //changes
} else {
System.out.print("Please enter an integer value: ");
in.next();
continue;
}
// validate that the input is positive
if(intExist){ //changes
if (input < 0) {
System.out.print("Please print a POSITIVE integer: ");
continue;
} else {
validationSuccessful = true;
}
System.out.println("The input is: " + input);
}
} while (validationSuccessful == true); // changes
在写“//changes”的地方,我对您的代码进行了更改。根据我的理解,如果输入包含除int值以外的任何内容,那么它应该显示“请输入一个整数值”。如果输入中的任何令牌包含非整数值,循环将中断,并且它还将打印一条消息“请输入整数值”。
若要放弃一行,请使用
in.nextLine();
如果您使用
in.next();
它只读一个单词/标记。(我所说的“词”是指空格之间的任何东西)
我只想接受一个整数值作为输入,而不仅仅是如果行包含一个整数。
int value;
while(true) {
// a number please.
try {
value = Integer.parseInt(in.nextLine());
if (value > 0)
break;
// not positive.
} catch (NumberFormatException e) {
// not an integer
}
}
注:0既不为正,也不为负。
在分离标记之前,我试图检查扫描仪是否有多个标记。我目前正在尝试使用扫描仪。hasNext()(我的扫描仪的名字是sc)。如果用户输入“string int”,那么我不想打印“enter age”或“enter grade” 目前,无论输入是什么,我的程序都会跳过if语句。如果我把它拿走!然后,即使输入是一行,这些行也会打印出来。他们似乎也打印后,下一个是我发现奇怪的。我将非常感谢您的帮助!
对于作业,我必须编写以下代码: 当我尝试编译它时,它在命令提示符下给了我3个错误,说“无法解析符号,符号:类扫描仪,位置:类单词,扫描仪用户输入=新扫描仪(System.in)”。我不确定错误在哪里。我应该使用BufferedReader作为输入吗?
我需要检查用户输入的内容是否正确。如果不是,我需要以msgbox的形式打印错误。 上面的代码似乎不起作用。 有什么想法吗?
问题内容: 因此,我是一名新Java程序员,我试图弄清楚为什么一段代码无法正常工作。我遇到的问题是:“字符串兴趣= input.nextLine();”,它跳过了用户的输入并跳至下一个System.out,因此它仅在控制台中显示“您的个人资料…”在允许用户输入任何数据之前。抱歉,这是一个愚蠢的问题,我很新! 问题答案: 这样说: 其余代码可能与您上面的代码相同。 编辑: 它必须是这样的(我的意思是
因此,我是一个新的Java程序员,我正试图弄清楚为什么一段代码不能工作。我遇到的问题是“String interests=input.nextLine();”这一行,它跳过了用户的输入并跳转到下一个System.out,所以它只显示“Your Profile...”。在允许用户输入任何数据之前。抱歉,如果这是一个愚蠢的问题,我是很新的!
问题内容: 我正在尝试做的是拥有多个具有不同变量的输入。每个变量将是不同方程式的一部分。我正在寻找一种方法来做,我想我有一个主意。我只想知道这是否合法,也许还有更好的方法。 问题答案: 如果每个输入都问相同的问题,则应使用循环和输入数组: 或者如Chip所建议的,您可以从一行中解析输入: 您在正确的轨道上,所做的工作正常。这只是一种更好,更灵活的处理方式。