使用后初始化数组

所以这是我的代码:


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 初始化了我的数组。我知道问题是什么,我只是不知道如何解决它。提前致谢 :)。


MMTTMM
浏览 136回答 3
3回答

德玛西亚99

你可以截断数组以删除null元素String[] sorteerArray = new String[25];int nbValue = 0;for (int i = 0; i < 25; i++) {&nbsp; &nbsp; System.out.print (i + 1 );&nbsp; &nbsp; invoer = sc.nextLine();&nbsp; &nbsp; sorteerArray[i] = invoer;&nbsp; &nbsp; nbValue++;&nbsp; &nbsp; if ("".equals(invoer)) {&nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; }}sorteerArray = Arrays.copyOf(sorteerArray, nbValue);Arrays.sort(sorteerArray);用一个 ListList<String> sorteerList= new List<String>();for (int i = 0; i < 25; i++) {&nbsp; &nbsp; System.out.print (i + 1 );&nbsp; &nbsp; invoer = sc.nextLine();&nbsp; &nbsp; sorteerList.add(invoer);&nbsp; &nbsp; if ("".equals(invoer)) {&nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; }}sorteerList.sort(Comparator.naturalOrder());

LEATH

您可以使用“”初始化字符串数组。例如-for(int i=0;i<25;i++){&nbsp; &nbsp; sorteerArray[i]="";}或者您可以使用集合即列表来拥有动态大小的数组。

Helenr

想想如果你输入""第三个字符串会发生什么。所以你的循环中断了,数组中的一些值仍然是String的默认值,在这种情况下是null.这使得sort尝试与null其他字符串进行比较(您可以在线阅读如何.sort工作)。要解决此问题,您应该在循环之前添加以下内容:for (int i = 0; i < sorteerArray.length; i++) {&nbsp; &nbsp; sorteerArray[i]="";}如果您使用调试器检查代码,您将能够看到数组中的所有值,在 , 之后""都是null. 所以在sort运行时,它会比较数组的值,并在某个时候到达null,导致NullPointerException.我上面写的代码将用空字符串初始化数组,以便可以比较它们。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java