Java 范围和输入类型验证
我有个问题。代码应该接受两个数字不同的整数。如果不是整数,代码会告诉您并要求重新输入。如果它是整数,但不满足条件,它将告诉您,然后提示您重新输入。除了输入0以结束循环/程序外,所有操作都有效。这件事我已经坚持了两天了。有什么建议吗Java 范围和输入类型验证,java,validation,input,while-loop,Java,Validation,Input,While Loop,我有个问题。代码应该接受两个数字不同的整数。如果不是整数,代码会告诉您并要求重新输入。如果它是整数,但不满足条件,它将告诉您,然后提示您重新输入。除了输入0以结束循环/程序外,所有操作都有效。这件事我已经坚持了两天了。有什么建议吗 int num = 1; while (num != 0) { System.out.print("Enter a 2-digit number. The digits should be different. Zero to stop
int num = 1;
while (num != 0) {
System.out.print("Enter a 2-digit number. The digits should be different. Zero to stop: ");
while (!in.hasNextInt()) {
System.out.print("Not an integer, try again: ");
in.next();
}
num = in.nextInt();
while (num < 10 || num > 99) {
System.out.println("NOT good for your game!");
System.out.print("Enter a 2-digit number. The digits should be different. Zero to stop: ");
while (!in.hasNextInt()) {
System.out.print("Not an integer, try again: ");
in.next();
}
num = in.nextInt();
}
if (equalDigs(num) == false)
System.out.println("NOT good for you game!");
else
System.out.println("Good for your game! Play!");
}
}
public static boolean equalDigs(int n) {
int d1 = n / 10;
int d2 = n % 10;
if (d1 == d2)
return false;
else
return true;
}
int num=1;
while(num!=0){
System.out.print(“输入一个两位数的数字。数字应该不同。零表示停止:”);
而(!in.hasNextInt()){
System.out.print(“不是整数,请重试:”);
in.next();
}
num=in.nextInt();
而(num<10 | | num>99){
System.out.println(“不适合你的游戏!”);
System.out.print(“输入一个两位数的数字。数字应该不同。零表示停止:”);
而(!in.hasNextInt()){
System.out.print(“不是整数,请重试:”);
in.next();
}
num=in.nextInt();
}
if(equalDigs(num)=false)
System.out.println(“对你的游戏不好!”);
其他的
System.out.println(“对你的游戏有好处!玩吧!”);
}
}
公共静态布尔等式(int n){
int d1=n/10;
int d2=n%10;
如果(d1==d2)
返回false;
其他的
返回true;
}
您的问题来自重复检查。您可以使用do while
语句而不是while
语句来减少检查次数:
public static void main(String[] args) throws Exception {
Scanner in = new Scanner(System.in);
int num;
do {
System.out.print("Enter a 2-digit number. The digits should be different. Zero to stop: ");
String input = in.next();
try {
num = Integer.valueOf(input);
if(num == 0) {
break;
}
if(num < 10 || num > 99) {
System.out.println("NOT good for your game!");
} else{
if(input.charAt(0) == input.charAt(1)) {
System.out.println("NOT good for you game!");
} else {
System.out.println("Good for your game! Play!");
}
}
} catch (NumberFormatException ignored) {
System.out.print("Not an integer, try again: ");
}
} while (true);
}
publicstaticvoidmain(字符串[]args)引发异常{
扫描仪输入=新扫描仪(系统输入);
int-num;
做{
System.out.print(“输入一个两位数的数字。数字应该不同。零表示停止:”);
字符串输入=in.next();
试一试{
num=整数。valueOf(输入);
如果(num==0){
打破
}
如果(num<10 | | num>99){
System.out.println(“不适合你的游戏!”);
}否则{
如果(输入字符(0)=输入字符(1)){
System.out.println(“对你的游戏不好!”);
}否则{
System.out.println(“对你的游戏有好处!玩吧!”);
}
}
}捕获(忽略NumberFormatException){
System.out.print(“不是整数,请重试:”);
}
}虽然(正确);
}
重构代码的一种方法是从命令行读取字符串,而不是读取数字,然后验证该输入以确保其满足以下条件:
- 输入长度为两个字符
- 两个字符都是数字
- 第一个和第二个数字是唯一的
我创建了一个名为validate()
的方法,该方法为此做了大量工作。这使得main()
方法只关注在验证失败时轮询用户输入
public static boolean validate(String input) {
// check that input length is two characters
if (input.length() != 2) {
return false;
}
// check that a two digit number was entered
if (Character.getNumericValue(input.charAt(0)) < 0 || Character.getNumericValue(input.charAt(0)) > 9 ||
Character.getNumericValue(input.charAt(0)) < 0 || Character.getNumericValue(input.charAt(0)) > 9) {
return false;
}
// check that first and second numbers are unique
if (input.charAt(0) == input.charAt(1)) {
return false;
}
return true;
}
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
String input;
do {
System.out.println("Enter a 2-digit number. The digits should be different. Zero to stop: ");
input = reader.next();
if (!validate(input)) {
System.out.println("NOT good for your game!");
}
else {
break;
}
} while(true);
System.out.println("Good for your game! Play!");
// you can also use the value of 'input' here if needed
}
公共静态布尔验证(字符串输入){
//检查输入长度是否为两个字符
如果(input.length()!=2){
返回false;
}
//检查是否输入了两位数字
如果(Character.getNumericValue(input.charAt(0))<0 | | Character.getNumericValue(input.charAt(0))>9||
Character.getNumericValue(input.charAt(0))<0 | | Character.getNumericValue(input.charAt(0))>9){
返回false;
}
//检查第一个和第二个数字是否唯一
如果(输入字符(0)=输入字符(1)){
返回false;
}
返回true;
}
公共静态void main(字符串[]args){
扫描仪阅读器=新扫描仪(System.in);
字符串输入;
做{
System.out.println(“输入一个两位数的数字。数字应该不同。零表示停止:”;
输入=reader.next();
如果(!验证(输入)){
System.out.println(“不适合你的游戏!”);
}
否则{
打破
}
}虽然(正确);
System.out.println(“对你的游戏有好处!玩吧!”);
//如果需要,也可以在此处使用“输入”的值
}
对于此用例,您应该使用do while。尝试一下,它会大大简化问题。欣赏它,但有没有一种方法可以毫无例外地解决问题?这是一个介绍类,我们还没有复习过所有的内容。请欣赏,但是没有字符串和.getNumericalValue,我们可以完成吗?因为我们还没有学过。getNu。。。你应该输入int而不是string。mg解决方案的优点是用户可以输入他想要的任何内容。如果输入是非数字的,代码将简单地拒绝它并再次询问。