初始化时是否可以覆盖长度为0的数组?

时间:2019-02-18 21:09:14

标签: java arrays nullpointerexception null override

在这种情况下,我试图找出一种方法来覆盖特定的数组。 通过LinkedList进行迭代,当遇到Element null时,应该将Element的索引添加到已经定义的int数组中。

public int [] indexes()       
{
    int [] result = new int [0];
    int counter  = 0;
    Element current = first;
    int k = 0;

    for(int i = 0 ; i< size() ; i++)
    {
        if(current.getContent()==null)
        {
            counter++;     
        }
    }

    int [] temp = new int [counter];

    current = first;

    for(int i = 0 ; i< size() ; i++)
    {
        if(current.getContent()==null)
        {
            temp[k++] = i ;

        }
    }

    result = temp;
    return result;

您已经看到,我有一个数组,其中没有元素,长度为0。

然后,遍历列表以检查是否有多少个元素为空。当我找到一个时,我会增加计数器。

我用计数器的长度设置了一个新的临时数组,并用索引填充了临时元素。

第一个问题:行的结果是否为temp?按预期工作?现在,名为result的数组是否包含temp的数组?

第二个问题:如何在没有得到NullpointerException的情况下检查LinkedList中的Element是否为null?我在if条件中尝试使用以下内容:

  1. current == null
  2. current.getContent()== null
  3. current.equals(null)
  4. current.getContent()。equals(null)

所有这些都返回了计数器0,这意味着在遇到Null元素时它没有增加计数器。我该如何重写if条件?

2 个答案:

答案 0 :(得分:0)

问题1:是。结果和温度引用相同的数据。

问题2:您的for循环有问题:

for(int i = 0 ; i< size() ; i++)
{
    if(current.getContent()==null)
    {
        temp[k++] = i ;

    }
}

您没有更改电流,因此它始终指向第一个元素。

我不确定您是使用Java的LinkedList <>还是实现自己的Java。

我写了这个小程序。我认为它可以说明您正在尝试做的事情:

import java.util.*;

public class Foo {
    public static void main(String[] args) {
        LinkedList<String> list = new LinkedList<String>();;
        list.add("Hello");
        list.add("There");
        list.add(null);

        for (String str: list) {
            System.out.println(str != null ? str : "<null>");
        }

        ArrayList<Integer> indexes = new ArrayList<Integer>();
        int index = 0;
        for (String str: list) {
            if (str == null) {
                indexes.add(index);
            }
            ++index;
        }
        for (Integer thisIndex: indexes) {
            System.out.println(thisIndex);
        }
    }
}

最后,您需要将ArrayList转换为int []。但是这个小家伙的输出是:

$ javac Foo.java && java Foo
Hello
There
<null>
2

答案 1 :(得分:0)

我能够用这一行覆盖结果数组。

result = temp;

检查列表中Element是否为null的方法是:

current.getContent() == null;

最后我实际上忘记了将当前指针设置为下一个元素,这实际上是我最大的问题:

current = current.getSucc();

感谢大家的帮助和时间。我真的很感激!