基本上,我正在尝试使用for循环将用户输入存储在多维数组中。如果用户键入了一些不期望/想要的东西(例如小于0),将显示一条警告消息,理想情况下循环应该“等待”,直到它收到下一个有效整数。
目前,我的代码(如下所示)工作正常,但我想知道是否有更好/更优化的方法。
for (int row = 0; row < array.length; row++) {
for (int column = 0; column < array[row].length; column++) {
int number = input.nextInt();
if((input.nextInt() >= 0) {
array[row][column] = number;
} else {
System.out.println("Input must be > 0.");
column--;
}
}
答案 0 :(得分:2)
使用do..while
循环等待用户输入有效内容。这比修改循环计数器更清晰。
for (int row = 0; row < array.length; row++) {
for (int column = 0; column < array[row].length; column++) {
bool hasEnteredValidInput = false;
do
{
int number = input.nextInt();
if(number >= 0) {
array[row][column] = number;
hasEnteredValidInput = true
} else {
System.out.println("Input must be > 0.");
}
} while (!hasEnteredValidInput);
}
}
更好的方法是将阅读代码提取到自己的函数中:
for (int row = 0; row < array.length; row++) {
for (int column = 0; column < array[row].length; column++) {
array[row][column] = readValidInputFromUser();
}
}
public string readValidInputFromUser()
{
while(true)
{
int number = input.nextInt();
if(number >= 0) {
return number;
} else {
System.out.println("Input must be > 0.");
}
}
}
这个版本非常清楚你在做什么。
答案 1 :(得分:1)
这几乎就是这样做的。你可以将它转换为while循环,但我认为没有理由这样做。
int column = 0;
while ( column < array[row].length) {
int number = input.nextInt();
if((input.nextInt() >= 0) {
array[row][column] = temp;
++column;
} else {
System.out.println("Input must be > 0.");
}
}
答案 2 :(得分:1)
您不知道用户输入无效输入的次数,因此这是何时使用while循环的主要示例。
试试这个:
for (int row = 0; row < array.length; row++) {
for (int column = 0; column < array[row].length; column++) {
int number = input.nextInt();
if(number >= 0) {
array[row][column] = temp;
}
else
{
while(number < 0)
{
System.out.println("Input must be > 0.");
number = input.nextInt();
}
}
}
另请注意,如果input.nextInt()
改为number
,我的if语句会更改为nextInt()
,因为再次调用{{1}}会从您连接到扫描仪的任何输入流中读取。
答案 3 :(得分:0)
在该特定条件下将循环代码递减。在column--
你也可以在当前的for循环中这样做:
for (int row = 0; row < array.length; row++) {
for (int column = 0; column < array[row].length; column++) {
int number;
do {
number = input.nextInt();
if(number<0) System.out.println("Number should be >= 0, enter again");
}while(number<0);
array[row][column] = number;
}
}