Можно ли переопределить массив, который имеет длину 0 при инициализации? - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь найти способ переопределить определенный массив в этом сценарии.Я перебираю LinkedList, и когда я сталкиваюсь с нулем Элемента, я должен добавить индекс Элемента к уже определенному массиву целых.

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.

После этого я перебираю список, чтобы проверить, равны ли и какие элементы элементу NULL.Когда я нахожу его, я увеличиваю счетчик.

Я устанавливаю новый временный массив с длиной счетчика и заполняю временный элемент индексами.

1-й Вопрос: Есть ли в строкерезультат = температура;работать как задумано?Содержит ли массив с именем result теперь массив temp?

2-й вопрос: Как я могу проверить, является ли элемент нулевым в LinkedList, не получая исключение NullpointerException?Я попытался использовать следующее в моих условиях if:

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

Все они вернули счетчик 0, что означает, что он не увеличивал счетчик при обнаружении нулевого элемента.Как я могу переписать условия if?

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Мне удалось переопределить массив результатов с помощью этой строки.

result = temp;

Также был способ проверить, является ли элемент пустым в списке:

current.getContent() == null;

И последнее, что я на самом деле забыл установить текущий указатель на следующий Элемент, который на самом деле был моей самой большой проблемой:

current = current.getSucc();

Спасибо всем за помощь и время.Я действительно ценю это!

0 голосов
/ 19 февраля 2019

Вопрос 1: Да.result и temp относятся к одним и тем же данным.

Вопрос 2. Ваш цикл for проблематичен:

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

    }
}

Вы не меняете ток, поэтому он всегда указывает на первый элемент.

Я не уверен, используете ли вы Java LinkedList <> или реализуете свой собственный.

Я написал эту маленькую программу.Я думаю, что это демонстрирует, что вы пытаетесь сделать:

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
...