-3

所以这是我的代码:

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

4 回答 4

2

你可以

  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());
    
于 2018-10-14T14:28:55.643 回答
1

您可以使用“”初始化字符串数组。例如-

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

或者你可以使用一个集合,即一个列表来拥有一个动态大小的数组。

于 2018-10-14T14:27:38.487 回答
1

想想如果你输入""第三个字符串会发生什么。

所以你的循环中断了,数组中的一些值仍然是String的默认值,在这种情况下是null.

这使得sort尝试与null其他字符串进行比较(您可以在线阅读如何.sort工作)。

要解决此问题,您应该在循环之前添加:

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

如果您使用调试器检查代码,您将能够看到数组中的所有值,在 , 之后""都是null. 因此,当sort运行时,它将比较数组的值,并在某个时候到达null,导致NullPointerException.

我上面写的代码将用空字符串初始化数组,以便可以比较它们。

于 2018-10-14T14:28:11.837 回答
1

在这种情况下,您可以使用 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);
        }
    }
}
于 2018-10-14T14:32:28.333 回答