在java中获取正整数的用户输入

时间:2013-08-01 19:48:05

标签: java input

我必须编写一个程序,要求用户输入整数,但它们必须是正面的。 我很确定我必须使用循环,并且不要认为我被允许使用Math.abs()。

我现在写的东西看起来很乱。这是代码:

public class Q1{
    public static void main(String[] args){
        int num1, num2, num3;

        while(true){
            System.out.println("Input first integer.");
            num1 = TextIO.getInt();
            if(num1 > 0)
                break;
            System.out.println("Integer isn't positive. Try again");
        } 

        while(true){
            System.out.println("Input second integer.");
            num2 = TextIO.getInt();
            if(num2 > 0)
                break;
            System.out.println("Integer isn't positive. Try again");
       }

       while(true){
           System.out.println("Input third integer.");
           num3 = TextIO.getInt();
           if(num3 > 0)
               break;
           System.out.println("Integer isn't positive. Try again");
       }

....


   }
}

我基本上只是为每个整数做了单独的while循环来测试整数是否为正,因为当我使用一个循环时我无法使其正常运行。有没有办法只使用一个仍然可以工作但看起来更整洁的循环?

5 个答案:

答案 0 :(得分:2)

您可以将该循环移到另一个方法中:

public int readPositiveInt() {
    int num = 0;
    int attempt = 0;
    int maxAttempt = 3;

    // Allow only maxAttempt to enter correct input.
    while(true && attempt < maxAttempt) {
        num = TextIO.getInt();
        if(num > 0)
            break;
        System.out.println("Integer isn't positive. Try again");
        ++attempt;
    } 

    return num;
}

然后在你正在进行循环的地方调用此方法。

确保此方法可以使用TextIO,无论它是什么。

此外,如果用户继续输入负数,您应该更好地执行最大尝试次数,因为您可能会进入无限循环。

答案 1 :(得分:0)

您可以将while循环包装在for循环中,并将整数放在数组中:

int[] nums = new int[] {-1, -1, -1};
for (int i = 0; i < 3; i++) {
  while(nums[i] <= 0)
    nums[i] = TextIO.getInt();
}

答案 2 :(得分:0)

编程时,您尝试实现3个目标:制作代码,可读,直观和可维护。

我建议您创建一个可以重复使用的方法。您的案例中的方法如下所示:

public int readPositiveInt(String message) {
    int num = 0;
    boolean exitLoop = false;

    while(!exitLoop){
        System.out.println(message);
        num = TextIO.getInt();
        if(num > 0) {
            exitLoop = true;
            // I don't like to break from a while(true), I personally find it messy
        }
        else {
            System.out.println("Integer isn't positive. Try again");
        }

    } 

    return num;
}

不是创建像num1,num2,num3这样的变量,而只需创建一个int数组并将所有值存储在那里。如果你不确定要存储多少个数字,我建议你使用List的实现,比如ArrayList。

我希望这会有所帮助。

答案 3 :(得分:0)

或许这样的事情?

public class Q1{
public static void main(String[] args){

int[] input_integers = new int[3]; //create an array of however many integers you need 

int i = 0; // initiate your counter
while(i<input_integers.length){ // you will loop through until all integers are set
System.out.println("Input integer number "+ (1+i)); // computers count from 0, humans from 1
input_integers[i] = TextIO.getInt();
if(input_integers[i] < 0) // check if it is not positive
System.out.println("Integer isn't positive. Try again");
else { // if it is, increment your counter and get the next integer
i++;
}
} 
 }

 }

希望这有帮助

**此代码未经过测试

答案 4 :(得分:0)

这是一个带有单个while循环且不使用数组的解决方案(可以完成)。但是,你可以看到它不符合预期。这样的实现总是低效的并且是不鼓励的。 所以更好地使用数组或其他人建议的单独方法

int i=0;
while (i < 3) {
        int tmp = 0;
        switch (i) {
        case 0:
            num1 = tmp = TextIO.getInt();
            System.out.println("Input first integer.");
            break;
        case 1:
            num2 = tmp = TextIO.getInt();
            System.out.println("Input second integer.");
            break;
        case 2:
            num3 = tmp = TextIO.getInt();
            System.out.println("Input Third integer.");
            break;
        }

        if (tmp < 0) {
            System.out.println("Integer isn't positive. Try again");
        } else {
            i++;
        }
    }