簡體   English   中英

嘗試在Java中使用自定義比較器時出錯

[英]Error when attempting to use custom comparator in Java

我正在嘗試創建一個讀取文本文件的類,每行具有相同的格式,“#order”得分 - 名稱“。 我希望能夠從文件中讀取每一行並將其存儲在一個數組中,然后按最高分數對其進行排序。 當它只是“#order”得分時我能夠完成這個,但是將混合物添加到混合物中會讓事情變得復雜。 錯誤是

Scoring.java:46: error: no suitable method found for sort(ArrayList<String>,<anonymous Comparator<String>>)
            Arrays.sort(scores, new Comparator<String>(){
                  ^
method Arrays.<T#1>sort(T#1[],Comparator<? super T#1>) is not applicable
  (cannot infer type-variable(s) T#1
    (argument mismatch; ArrayList<String> cannot be converted to T#1[]))
method Arrays.<T#2>sort(T#2[],int,int,Comparator<? super T#2>) is not applicable
  (cannot infer type-variable(s) T#2
    (actual and formal argument lists differ in length))
where T#1,T#2 are type-variables:
T#1 extends Object declared in method <T#1>sort(T#1[],Comparator<? super T#1>)
T#2 extends Object declared in method <T#2>sort(T#2[],int,int,Comparator<? super T#2>)

文本文件是:

1) 10000 - Michael
2) 10000 - Jake
3) 10000 - Alex

而且課程是:

import java.io.*;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Comparator;
public class Scoring
{ 
    private ArrayList<String> scores = new ArrayList<String>();
    public Scoring()
    {
        this(-1, "-1");
    }
    public Scoring(int newScore, String newName)
    {
        String highScoreFile = "scores.txt";
        String line;

        BufferedReader reader = null;
        try
        {
            File file = new File(highScoreFile);
            reader = new BufferedReader(new FileReader(file));
        }
        catch (FileNotFoundException fnfe)
        {
            fnfe.printStackTrace();
        }

        finally
        {
            try
            {

                while ((line = reader.readLine()) != null)
                {
                    String aScore = line;
                    String segments[] = aScore.split(") ");
                    aScore = segments[segments.length - 1];
                    scores.add(aScore);
                }
                if (newScore != -1 && !newName.equals("-1"));
                {
                    scores.add(newScore + " - " + newName);
                }
                System.out.println(Arrays.toString(scores.toArray()));
                Arrays.sort(scores, new Comparator<String>(){
                    @Override
                    public int compare(String o1, String o2)
                    {
                        return Integer.valueOf(o1).compareTo(Integer.valueOf(o2));
                    }
                });

                BufferedWriter writer = null;
                try
                {
                    File file = new File(highScoreFile);
                    FileWriter fw = new FileWriter(file);
                    writer = new BufferedWriter(fw);

                }
                catch (FileNotFoundException fnfe)
                {
                    fnfe.printStackTrace();
                }
                for (int i = 0; i < scores.size(); i++)
                {
                    writer.write((i + 1) + ") ");
                    writer.write(scores.get(i) + "\n");
                }
                System.out.println(Arrays.toString(scores.toArray()));
                reader.close();
                writer.close();
            }
            catch(IOException ioe)
            {
                ioe.printStackTrace();
            }
        }
    }
    public static void main(String[] args) {
        Scoring score = new Scoring();


    }
}

非常感謝任何反饋!

Arrays.sort期待T[]但是你提供的ArrayList不是數組,它是一個在內部使用數組來保存元素的列表。

請改用Collections.sort ,或者從Java 8開始,您可以使用yourList.sort(comparator)


BTW split方法使用正則表達式(regex)作為參數,其中)是正則表達式特殊字符之一 如果你要正確對待)作為文字,你需要逃避它(更多信息逃亡(正則表達式

所以代替aScore.split(") "); 你可以使用aScore.split("\\\\) ");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM