使用数组后对其进行初始化

时间:2018-10-14 14:19:24

标签: java arrays sorting

这是我的代码:

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 :(得分:1)

您可以

  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());
    

答案 1 :(得分:0)

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

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

或 您可以使用集合(即列表)具有动态尺寸数组。

答案 2 :(得分:0)

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

因此,您的循环中断了,数组中的某些值仍为String的默认值,在本例中为null

这样做是为了让sort尝试将null与其他字符串进行比较(您可以在线阅读.sort的工作原理)。

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

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

如果使用调试器遍历代码,则可以看到数组""之后的所有值都是null。因此,当sort运行时,它将在数组的值之间进行比较,并在某个时候到达null,从而导致NullPointerException

我上面编写的代码将使用空字符串初始化该数组,以便可以对其进行比较。

答案 3 :(得分:0)

在这种情况下,您可以使用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);
        }
    }
}