【问题标题】:Sort String using compareTo() [duplicate]使用 compareTo() 对字符串进行排序 [重复]
【发布时间】:2016-05-08 06:30:45
【问题描述】:

我尝试使用 compareTo() 方法对字符串数组进行排序,同时用户不断将字符串输入数组。但我不断收到以下错误: 线程“主”java.lang.NullPointerException 中的异常 在 java.lang.String.compareTo(Unknown Source)

    public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    int numsDVD =0; //eSize
    String [] DVD = new String [128];
    int [] Length = new int[128];
    String choice = "";
    do
    {
        if(choice.equalsIgnoreCase("a")&&numsDVD<=DVD.length-1)
        {
            numsDVD=addDVD(DVD, Length, numsDVD, input);
        }
    }while(!(choice.equalsIgnoreCase("Q")));
    input.close();
}

public static void sortedinsert(String[] titles, int[] lengths, int numDVDs, String DVD, int length)
{
    System.out.println("Index to compare : " + (numDVDs-1));
    if(DVD.compareTo(titles[numDVDs-1])>=0)
    {
        titles[numDVDs]=DVD;
    }
    else if(DVD.compareTo(titles[numDVDs-1])<0)
    {
        for(int i=0; i<numDVDs-1; ++i)
        {
            int search = numDVDs-i;
            String tmpString = "";
            int tmplength = 0;
            if(DVD.compareTo(titles[search])>0)
            {
                for(int j=numDVDs; j>numDVDs-1; --j)
                {
                    tmpString=titles[j-1];
                    tmplength=lengths[j-1];
                    titles[j]=tmpString;
                    lengths[j]=tmplength;
                }
                break;
            }
        }
        for (int i =0; i<numDVDs; ++i)
        {
            System.out.println(titles[i]);
        }
    }
}
// add to titles and lengths arrays at index numDVDs

// return numDVDs + 1
public static int addDVD(String[] titles, int[] lengths, int numDVDs, Scanner stdIn)
{
    if(numDVDs==0)
    {
        titles[numDVDs]=getvalidatedinfo(stdIn, "Please enter DVD Title : ", "");
        lengths[numDVDs]=getvalidatedinfo(stdIn, "Please enter DVD Length : ", 0);
    }
    else
    {
        String input = getvalidatedinfo(stdIn, "Please enter DVD Title : ", "");
        int length = getvalidatedinfo(stdIn, "Please enter DVD Length: ", 0);
        sortedinsert(titles, lengths, numDVDs, input, length);
    }
    return numDVDs + 1;
}

这是我不断遇到的错误

Exception in thread "main" java.lang.NullPointerException
at java.lang.String.compareTo(Unknown Source)
at Moviecheckeradv.sortedinsert(Moviecheckeradv.java:105)
at Moviecheckeradv.addDVD(Moviecheckeradv.java:148)
at Moviecheckeradv.main(Moviecheckeradv.java:21)

请帮帮我,谢谢

【问题讨论】:

  • 这是第 105 行:if(DVD.compareTo(titles[numDVDs-1])>=0) 很抱歉造成混乱
  • 您确定您的DVD 变量不为空吗?你能分享你的getvalidatedinfo()方法的代码吗?
  • public static String getvalidatedinfo(Scanner stdIn, String Prompt, String validateString) { do { System.out.print(Prompt); validateString = stdIn.nextLine(); }while(validateString.length()==0); for (int i=0; i='a'&&validateString.charAt(i)='A'&&validateString.charAt(i)
  • @AlexandreFillatre 很抱歉造成混乱

标签: java arrays string sorting compareto


【解决方案1】:

始终检查您的输入并确保其正确且符合预期。 最有可能问题出在:

titles[numDVDs-1]

null。因此,您正在尝试compareTo(null),它给出了 NPE。

【讨论】:

  • 我打算发布相同的答案。这是正确的。也看到stackoverflow.com/questions/7168497/…
  • 我在开始时将 numDVDs 设置为 0...
  • @studyenglish 你的问题...titles[-1]是什么意思?
  • @Idos 我有两个单独的条件。我不认为 numDVDs 的值会变成 -1
  • 我会尝试再次阅读代码,谢谢你的帮助。 @Idos
猜你喜欢
  • 2017-02-23
  • 2012-08-20
  • 2018-02-15
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
  • 1970-01-01
  • 2020-04-09
  • 1970-01-01
相关资源
最近更新 更多