Инициализировать массив после его использования - PullRequest
0 голосов
/ 14 октября 2018

Итак, вот мой код:

import java.util.Arrays;
import java.util.Scanner;

public class Test9 {
public static void main (String[] args) {

    Scanner sc = new Scanner(System.in);
    String invoer = null;
    String[] sorteerArray = new String[25];

    for (int i = 0; i < 25; i++) {

        System.out.print (i + 1 );
        invoer = sc.nextLine();
        sorteerArray[i] = invoer;

        if ("".equals(invoer)) {
            break;
        }
    }

    Arrays.sort(sorteerArray);

    for (String sorteerArrayOutput : sorteerArray) {
        System.out.println (sorteerArrayOutput);
    }
}
}

Я получаю исключение NullPointerException, потому что, когда я пытаюсь отсортировать свой массив, в массиве появляются нулевые значения, это потому, что я инициализировал свой массив с 25. Я знаю, чтоПроблема в том, что я просто не могу это исправить.Заранее спасибо:).

Ответы [ 4 ]

0 голосов
/ 14 октября 2018

В подобных сценариях вы можете использовать ArrayList вместо массивов, как описано ниже

import java.util.*;

public class Test9 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        String invoer = null;
        List<String> sorteerArray = new ArrayList<>(25);

        for (int i = 0; i < 25; i++) {

            System.out.print(i + 1);
            invoer = sc.nextLine();
            sorteerArray.add(invoer);

            if ("".equals(invoer)) {
                break;
            } 
        }

        Collections.sort(sorteerArray);

        for (String sorteerArrayOutput : sorteerArray) {
            System.out.println(sorteerArrayOutput);
        }
    }
}
0 голосов
/ 14 октября 2018

Подумайте, что произойдет, если вы введете "" в третьей строке.

Таким образом, ваш цикл прерывается, при этом некоторые значения в массиве по-прежнему равны String значению по умолчанию, которое в данном случае равно null.

Это делает так, что sort пытается сравнить null с другими строками (вы можете прочитать в Интернете, как работает .sort).

Чтобы это исправить, вы должны добавить это перед циклом:

for (int i = 0; i < sorteerArray.length; i++) {
    sorteerArray[i]="";
}

Если вы пройдете через код с помощью отладчика, вы увидите, что все значения в массиве после "" равны null.Поэтому, когда sort работает, он сравнивает значения массива и в какой-то момент достигает значения null, в результате чего NullPointerException.

Код, который я написал выше, инициализирует массив пустыми строками, чтобы их можно было сравнивать.

0 голосов
/ 14 октября 2018

Вы можете

  1. Обрезать массив для удаления null элементов

    String[] sorteerArray = new String[25];
    int nbValue = 0;
    for (int i = 0; i < 25; i++) {
        System.out.print (i + 1 );
        invoer = sc.nextLine();
        sorteerArray[i] = invoer;
        nbValue++;
        if ("".equals(invoer)) {
            break;
        }
    }
    sorteerArray = Arrays.copyOf(sorteerArray, nbValue);
    Arrays.sort(sorteerArray);
    
  2. Использовать List

    List<String> sorteerList= new List<String>();
    for (int i = 0; i < 25; i++) {
        System.out.print (i + 1 );
        invoer = sc.nextLine();
        sorteerList.add(invoer);
        if ("".equals(invoer)) {
            break;
        }
    }
    sorteerList.sort(Comparator.naturalOrder());
    
0 голосов
/ 14 октября 2018

Вы можете инициализировать массив строк с помощью "".Например,

for(int i=0;i<25;i++){
    sorteerArray[i]="";
}

ИЛИ вы можете использовать коллекцию, то есть список, чтобы иметь массив динамического размера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...