while (array[i] == null)
给出了无法比较的类型错误。
我想做以下事情:
int i = 0;
int[] array = new int[50];
while (array[i] == null)
{
array[i] = console.nextInt();
i++;
}
答案 0 :(得分:3)
你不能这样做的原因是因为你有一个基本类型的数组。原始类型必须具有Java值。这是因为它们是值,而不是对象的引用。
诸如Integer之类的对象是对堆上的一块内存的引用。不指向任何东西是有意义的,因此它可以为空。
在您的情况下int[] array = int[50]
(如果语法正确),将永远不会有null元素。
你最好尝试这样的事情:
int[] array = new int[50];
for(int k = 0; k < 50; k++)
{
array[k] = console.nextInt();
}
这更具惯用性,任何阅读代码的人都会对你感到高兴。
如果您尝试这样做,您将获得一个超出范围的索引错误:
int i = 0;
Integer[] array = new Integer[50];
while (array[i] == null)
{
array[i] = console.nextInt();
i++;
}
所以试试这个:
Integer[] array = new Integer[50];
for(int i = 0; i < array.length; i++)
{
array[i] = console.nextInt();
}
如果控制台是扫描仪,则应使用:
int i = 0;
Integer[] array = new Integer[50];
while(console.hasNextInt() && i < 50)
{
array[++i] = console.nextInt();
}
答案 1 :(得分:3)
原始int不能为null,因此编译错误。只有对象引用可以为空。
正如 PM 77-1 建议的那样,您可以改为声明Integer
个对象的数组。 Integer是原始int的包装类。可以为其分配null
值。
默认情况下,如果使用原语int,则在实例化后,数组中的所有元素都会立即为0。如果您确定数组不应包含小于或等于0的值,则可以使用此检查:if( array[k] <= 0 ) { ... }
否则,如果您确定所有值都应由用户输入,我建议您使用 usmcs 的第一个建议代码块。