2010-10-01 52 views
0

我有一个标准的java数组,其中null值用于未分配或阵列中的空白点。如何判断是否还有未分配的值,即数组是否已满?如何确定数组中是否还有未分配的值?

+2

你说的全是什么意思? – zigdon 2010-10-01 19:32:50

+0

这很大程度上取决于数组的类型,以及如何初始化并使用它。你可以发布一些示例代码来展示你如何创建和使用数组? – 2010-10-01 19:33:33

+4

这个问题没有意义。它总是有你要求的大小。 – gawi 2010-10-01 19:35:18

回答

3

如果“不完整”的含义有数组中的空元素,那么你会创建一个方法,如

public boolean isFull(Object[] array) { 
    for (Object element : array) { 
     if (element == null) return false; 
    } 
    return true; 
} 
5

作为一个静态大小的数组,你可以说一个数组总是满的。

但是,如果你想知道你的数组中有多少个null值,你只需要经过它。

Object[] array = new Object[10]; 
int count = 0; 
for(Object item : array){ 
    if(item == null) 
     count++; 
} 

或特定方法:

public int countNulls(Object[] array){ 
    int count = 0; 
    for(Object item : array){ 
     if(item == null) 
      count++; 
    } 
    return count; 
} 

如果你被指数填写您的数组索引:

public int nextEmptyIndex(Object[] array){ 
    int count = 0; 
    for(Object item : array){ 
     if(item == null) 
      return count; 
     else 
      count++; 
    } 
    return -1; //Return an invalid value or do something to say that there is no empty index. 
} 
+0

好吧然后我怎么知道数组中是否有空格 – Luron 2010-10-01 19:33:38

+0

'if(countNulls(array)> 0)...' – 2010-10-01 19:39:27

+0

你的答案是误导性的,因为它只在两个假设下有效:他有一个对象集合,并且他分配的值不会为空。 – 2010-10-01 19:43:14

0

如果(myarray的[myarray.length-1]! = null){
System.out.println(“Array is full”);
}

+0

这对int []不起作用。 – gawi 2010-10-01 19:36:49

+0

遐我猜想没有。这个问题也不是很清楚,对不起 – mezzie 2010-10-02 03:41:35

0

虽然我明白你的问题,我有点困惑,为什么你正在问它。首先,我会刺探Q本身。

Java中的数组的大小是固定的,所以它们的'完整'的概念并没有太多意义。对于原始数组,整个数组用初始化的默认值进行初始化。因此,如果您知道要分配的值是非默认值,则可以从元素长度1中检查缺省值。

如果你有一个对象数组,你可以检查空值。再次,这假定你不是在你的人口中某个时候分配空值(这可能是不好的做法)。再次,您可以从阵列的最后一个元素入手,随时检查。

您可以通过使用适当的对象集合(例如数组列表)来避免此问题。您可以根据需要填充尽可能多的元素。

+0

让我再补充一点,因为在Java中真的不存在真正的基本数组,因为它们在低级语言中,你真的没有获得任何性能方面的东西,对象集合。当然,由于维护对象本身的开销很小,因此对象集合的内存开销会更大。尽管如此,这只会成为一个因素。 – 2010-10-01 19:39:32

+0

由于某些原因,许多Java初学者使用数组。必须有很多提倡数组的Java学习课程。 – 2010-10-01 20:16:32

+0

有趣的是 - 我曾与来自世界知名学术机构的科学家一起参与大型国际太空任务。在代码审查期间,我遇到了遍及代码的这个多维双重数组。我一直在分析它是如何使用的,试图理解它被使用的算法,但是我只是不能在我的生活中弄清楚它。 最终,我意识到他正在使用数组来模拟内存。是的,让我重复一遍,他创造了一个巨大的阵列,他到处传递模拟记忆。 它在一定程度上相当有洞察力 – 2010-10-01 20:26:35

1

阵列总是充满,所以

public boolean isFull(Object[] array) { 
    return true; 
} 
+0

好吧,我们明白了。我说错了。放松 – Luron 2010-10-01 19:43:33

+1

好,那么你应该修复措辞。 – 2010-10-01 20:21:52