【问题标题】:Why can't you compare array[n] to null in a while loop?为什么不能在 while 循环中将 array[n] 与 null 进行比较?
【发布时间】:2014-04-12 22:35:58
【问题描述】:
while (array[i] == null)

给出无与伦比的类型错误。

我想做以下事情:

  int i = 0;
  int[] array = new int[50];

  while (array[i] == null)
  {
     array[i] = console.nextInt();
     i++;
  }

【问题讨论】:

  • 什么是array?原语可以有null 值吗?
  • 如果你必须有这个循环,你需要为你的数组使用Integer类。
  • @Sotirios:array 是一个数组。什么是原始人? @PM:我将数组声明为 int 数组。这是你的意思吗?
  • 它是两种 Java 值类型之一。查一下。
  • int[] 数组 = int[50];完全错误!你不能那样做!!

标签: java arrays while-loop null comparison


【解决方案1】:

你不能这样做的原因是你有一个原始类型数组。原始类型在 Java 中必须具有值。这是因为它们是值,而不是对对象的引用。

像整数这样的对象是对堆上一块内存的引用。不指向任何东西是有意义的,因此它可以为空。

在你的情况下int[] array = int[50](如果它在语法上是正确的)永远不会有一个空元素。

你最好尝试这样的事情:

int[] array = new int[50];

for(int k = 0; k < 50; k++)
{
   array[k] = console.nextInt();
}

它更加地道,任何阅读您的代码的人都会对您更满意。

如果你尝试这个,你会得到一个 index out of bounds 错误:

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();
}

【讨论】:

  • 如果我的用户输入值的最大数量为50,但用户输入的值可能更少,我该怎么办?我如何将这些值强制放入数组中?
  • 我必须更多地了解控制台是什么。是Scanner。如果是这样,那根本无法返回 null 值,因此您必须改用 hasNextInt。
【解决方案2】:

原始 int 不能为 null,因此会出现编译器错误。只有对象引用可以为空。

正如 PM 77-1 所建议的,您可以改为声明一个 Integer 对象数组。 Integer 是原始 int 的包装类。它可以被分配一个null 值。

默认情况下,如果您使用原始 int,则数组中的所有元素在实例化后立即值为 0。如果您确定您的数组不应包含小于或等于 0 的值,则可以使用此检查:if( array[k] &lt;= 0 ) { ... }

否则,如果您确定所有值都应由用户输入,我建议您使用 usmcs 的第一个建议代码块。

【讨论】:

  • 如果我的用户输入值的最大数量为50,但用户可能输入的数量更少,我该怎么办?我如何将这些值强制放入数组中?
  • console.nextInt() 应确保用户输入所有 50 个值。否则,您必须为数组中未分配的元素分配默认值。见stackoverflow.com/questions/12487734/user-input-check-int-only
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-29
  • 2014-09-29
  • 2012-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多