我有这个代码,它应该是一个用户输入并将其存储在一个数组中,我只是想知道为什么它不允许我输入任何数字。
输入部分应该在if语句中吗?还有什么是让它正常工作的最佳方法?
import java.util.*;
public class fun_with_loops {
static Scanner scan = new Scanner(System.in);
public static void main (String[] args) throws java.io.IOException
{
int[] numbers = new int[10];
int numberSize = 0;
System.out.print("Enter a few numbers please\n");
while (numbers.length < 10)
{
int input = scan.nextInt();
if (input != 0)
{
numbers[numberSize] = input;
numberSize++;
}
else
{
break;
}
}
}
}
答案 0 :(得分:1)
<强>问题强>
循环控件的以下表达式总是被评估为false:
while (numbers.length < 10)
因为数组的长度实际上与声明时的长度相等。
<强>解决方案强>
为了按预期编程工作,您必须使用numberSize
变量作为控件:
while (numberSize < 10)
因为它会根据输入数量而增长。
答案 1 :(得分:0)
正如Am_I_Helpful所说,你在一个不会改变的值上使用while循环。我不确定在这种情况下是否需要使用。由于您希望循环特定次数,因此您可能希望使用for循环。如果次数取决于数组的大小,您仍然可以用数组长度(numbers.length)替换“10”。
for (int i; i< 10; i++)
{
int input = scan.nextInt();
if (input != 0)
{
numbers[numberSize] = input;
numberSize++;
}
else
{
break;
}
}
希望它有所帮助!
丹
关于何时使用每个循环的简短而完美的总结: http://mathbits.com/MathBits/CompSci/looping/whichloop.htm
但当然在编码时总是取决于你的目标,所以如果你不是那个编码,有时很难说哪个是最好的。
答案 2 :(得分:0)
因为数组初始化为10,所以长度始终为10.需要使用计数器变量。这是代码:
static Scanner scan = new Scanner(System.in);
public static void main (String[] args) throws java.io.IOException
{
int[] numbers = new int[10];
System.out.print("Enter a few numbers please\n");
int count = 0;
while (count < 10)
{
int input = scan.nextInt();
if (input != 0)
{
numbers[count] = input;
count++;
}
else
{
break;
}
}
答案 3 :(得分:0)
length
属性返回数组的大小,而不是数组中存在的元素数。您需要自己跟踪数组中的元素数量。
for(int eleCount = 0; eleCount < 10; eleCount++)
{
int input = scan.nextInt();
if (input != 0)
{
numbers[eleCount] = input;
}
else
{
break;
}
}