我必须编写一个程序,要求用户输入整数,但它们必须是正面的。 我很确定我必须使用循环,并且不要认为我被允许使用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循环来测试整数是否为正,因为当我使用一个循环时我无法使其正常运行。有没有办法只使用一个仍然可以工作但看起来更整洁的循环?
答案 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++;
}
}