Java 如何验证这些输入?
我写了一个简单的程序。它从用户那里得到两个整数,并向用户返回奇数。我验证它们以强制用户只键入整数。 当用户键入其他数据类型时,程序会给他我的自定义错误。这是目前为止的情况,但当这种情况发生时,用户必须从一开始就键入输入。这意味着程序会将用户带到第一个主页。 这是我的主要课程:Java 如何验证这些输入?,java,validation,input,Java,Validation,Input,我写了一个简单的程序。它从用户那里得到两个整数,并向用户返回奇数。我验证它们以强制用户只键入整数。 当用户键入其他数据类型时,程序会给他我的自定义错误。这是目前为止的情况,但当这种情况发生时,用户必须从一开始就键入输入。这意味着程序会将用户带到第一个主页。 这是我的主要课程: package train; import java.util.Scanner; public class Main { public static void main(String[] args) {
package train;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Calculate cal = new Calculate();
Scanner input = new Scanner(System.in);
int number1 = 0;
int number2 = 0;
boolean isNumber;
do {
System.out.println("enter number1 please : ");
if (input.hasNextInt()) {
number1 = input.nextInt();
isNumber = true;
System.out.println("enter number2 please : ");
}
if (input.hasNextInt()) {
number2 = input.nextInt();
isNumber = true;
} else {
System.out.println("wrong number!");
isNumber = false;
input.next();
}
} while (!(isNumber));
cal.setNumbers(number1, number2);
cal.result();
input.close();
}
}
这是我的calculate类,它返回奇数:
public class Calculate {
private int minNumber;
private int MaxNumber;
public void setNumbers(int min, int max) {
this.minNumber = min;
this.MaxNumber = max;
}
public void result() {
int count = 0; // number of results
ArrayList<Integer> oddNumber = new ArrayList<Integer>(); // array of odd numbers
// get odd numbers
for (int i = minNumber; i < MaxNumber; i++) {
if ((i % 2) != 0) {
oddNumber.add(i);
count++;
}
}
int i = 0;// counter for printing array
while (i < oddNumber.size()) {
if(i != oddNumber.size()){
System.out.print(oddNumber.get(i) + ",");
}else{
System.out.println(oddNumber.get(i));
}
i++;
}
// print result numbers
System.out.println("\nResult number : " + count);
// print number range
System.out.println("You wanted us to search between " + minNumber
+ " and " + MaxNumber);
}
}
公共类计算{
米努姆私人酒店;
私有整数MaxNumber;
公共无效集合编号(最小整数、最大整数){
this.minNumber=min;
这个.MaxNumber=max;
}
公开结果(){
int count=0;//结果数
ArrayList oddNumber=新ArrayList();//奇数数组
//得到奇数
对于(int i=minNumber;i
您可以计算用户输入的整数
输入的数量,这样您就可以解决问题
因此,您可以将代码修改为:
导入java.util.Scanner
public class Main {
public static void main(String[] args) {
Calculate cal = new Calculate();
Scanner input = new Scanner(System.in);
int number1 = 0;
int number2 = 0;
boolean isNumber;
int totalEnteredNumbers=0;
int currNumber=1;
do {
System.out.println("enter number"+currNumber+" please : ");
if (totalEnteredNumbers==0 && input.hasNextInt()) {
number1 = input.nextInt();
isNumber = true;
currNumber++;
System.out.println("enter number"+currNumber+" please : ");
totalEnteredNumbers++;
}
if (totalEnteredNumbers==1 && input.hasNextInt()) {
number2 = input.nextInt();
isNumber = true;
} else {
System.out.println("wrong number!");
isNumber = false;
input.next();
}
} while (!(isNumber));
cal.setNumbers(number1, number2);
cal.result();
input.close();
}
}
无论如何,您也可以在终止条件中删除
布尔
变量isNumber
,方法是将其替换为while(totalEnteredNumbers创建一个方法verifyAndGetNumber
,该方法将使用regex\d+
验证数字,这意味着匹配一个或多个数字。如果不是数字,则引发异常。捕获异常并打印自定义消息
public static void main(String[] args) {
Calculate cal = new Calculate();
Scanner input = new Scanner(System.in);
int number1 = 0;
int number2 = 0;
boolean isNumber = false;
do {
try {
System.out.println("enter number1 please : ");
if (input.hasNextLine()) {
number1 = verifyAndGetNumber(input.nextLine());
}
System.out.println("enter number2 please : ");
if (input.hasNextLine()) {
number2 = verifyAndGetNumber(input.nextLine());
}
isNumber = true;
} catch (Exception e) {
System.out.println(e.getMessage());
}
} while (!isNumber);
cal.setNumbers(number1, number2);
cal.result();
input.close();
}
private static int verifyAndGetNumber(String line) throws Exception {
if (line.matches("\\d+")) {
return Integer.parseInt(line);
}
throw new Exception("wrong number!");
}
然而,我发现接受的解决方案不会解决问题,就像第二个输入是非整数
一样,然后它也会要求第一个输入,这是实际的问题。你仍然接受了答案,所以如果我理解错了问题,请纠正我。
public static void main(String[] args) {
Calculate cal = new Calculate();
Scanner input = new Scanner(System.in);
int number1 = 0;
int number2 = 0;
boolean isNumber = false;
do {
try {
System.out.println("enter number1 please : ");
if (input.hasNextLine()) {
number1 = verifyAndGetNumber(input.nextLine());
}
System.out.println("enter number2 please : ");
if (input.hasNextLine()) {
number2 = verifyAndGetNumber(input.nextLine());
}
isNumber = true;
} catch (Exception e) {
System.out.println(e.getMessage());
}
} while (!isNumber);
cal.setNumbers(number1, number2);
cal.result();
input.close();
}
private static int verifyAndGetNumber(String line) throws Exception {
if (line.matches("\\d+")) {
return Integer.parseInt(line);
}
throw new Exception("wrong number!");
}