0

私は Java プログラミングがまったく初めてで、この問題に 2 週間悩まされています。問題を説明する方法さえよくわからないので、基本的にコード全体を追加しました。私がやりたいことは、基本的に、li.Poeng を値でソートすることです。

    String getYear = yearFrom.getSelectedItem().toString();
    String leFile = "http://www.it.hiof.no/~borres/commondata/fotballstatistikk/CSV/data" + getYear + ".txt".trim();

    List<Functions> filData = Functions.setupList(leFile); 


    String fra = yearFrom.getSelectedItem().toString() + ":" + monthFrom.getSelectedItem().toString() + ":" + dayFrom.getSelectedItem().toString();
    String til = yearTo.getSelectedItem().toString() + ":" + monthTo.getSelectedItem().toString() + ":" + dayTo.getSelectedItem().toString();



    String[] fraDat = fra.split(":");

    int fraDag = Integer.parseInt(fraDat[2]);
    int fraMaan = Integer.parseInt(fraDat[1]);
    int fraYear = Integer.parseInt(fraDat[0]);

    int fraDato = fraYear * 10000 + fraMaan * 100 + fraDag; 



    String[] tilDat = til.split(":");

    int tilDag = Integer.parseInt(tilDat[2]);
    int tilMaan = Integer.parseInt(tilDat[1]);
    int tilYear = Integer.parseInt(tilDat[0]);

    int tilDato = tilYear * 10000 + tilMaan * 100 + tilDag; 

    HashMap<String, TabellLinje> tabell = new HashMap<>();


    //----------------------------------------------------------------------------------------------


    for (int i = 0; i < filData.size(); i++) {

        String[] kampdat = filData.get(i).getdato().split(":"); 
        int dag = Integer.parseInt(kampdat[2]);
        int maan = Integer.parseInt(kampdat[1]);
        int year = Integer.parseInt(kampdat[0]);

        int filDato = year * 10000 + maan * 100 + dag;


        if (fraDato < tilDato) {
            if (tilDato >= filDato) {

                // Calculate points

                int hMaal = Integer.parseInt(filData.get(i).gethMaal());
                int bMaal = Integer.parseInt(filData.get(i).getbMaal());

                String hLag = filData.get(i).gethLag();
                String bLag = filData.get(i).getbLag();

                TabellLinje hjemmelag;
                TabellLinje bortelag;


                if (tabell.containsKey(hLag)) 
                {
                    hjemmelag = tabell.get(hLag);

                } else {
                    hjemmelag = new TabellLinje();  
                    hjemmelag.Navn = hLag;
                    tabell.put(hjemmelag.Navn, hjemmelag);
                }

                if (tabell.containsKey(bLag)) {
                    bortelag = tabell.get(bLag);

                } else {
                    bortelag = new TabellLinje();
                    bortelag.Navn = bLag;
                    tabell.put(bortelag.Navn, bortelag);
                }

                if (hMaal > bMaal) {
                    hjemmelag.Poeng += 3;
                    hjemmelag.Matches++;
                    bortelag.Matches++;

                } else if (hMaal == bMaal) {
                    hjemmelag.Poeng++;
                    bortelag.Poeng++;
                    hjemmelag.Matches++;
                    bortelag.Matches++;

                } else if (bMaal > hMaal) {
                    bortelag.Poeng += 3;
                    hjemmelag.Matches++;
                    bortelag.Matches++;

                }

                hjemmelag.GoalsAgainst += bMaal;
                hjemmelag.GoalsFor += hMaal;
                bortelag.GoalsAgainst += hMaal;
                bortelag.GoalsFor += bMaal;

            }
        }
    }

    // Output to GUI
    textArea.removeAll();
    List<TabellLinje> tabellListe = new ArrayList(tabell.values());

    for (int i = 0; i < tabellListe.size(); i++) {       
        TabellLinje li = tabellListe.get(i);
        textArea.add(li.Navn + " " + li.GoalsFor + " " + li.GoalsAgainst + " " + li.Poeng + " " + li.Matches);
    }

}

TabellLinje リスト内のオブジェクトである li.Poeng 変数をソートする追加のコードが必要であることを期待して、コードは正常に動作します。

ひどい説明と、乱雑なコードで申し訳ありません。助けてくれた白騎士に感謝!:D

4

1 に答える 1

1

ComparatorおよびCollections.sortメソッドを使用できます。

    List<TabellLinje> tabellListe = new ArrayList(tabell.values());
    Collections.sort(tabellListe, new Comparator<TabellLinje>() {
        @Override
        public int compare(TabellLinje o1, TabellLinje o2) {
            return o1.Poeng - o2.Poeng;
        }
    });

したがって、ソートはを使用してComparator、どちらの値が高いかを決定します。並べ替えは安定しているため、同じ値がそのまま残ります。

ただし、Javaの命名規則に従ってください。変数は、「Poeng」ではなく小文字の「poeng」にする必要があります。クラスのカプセル化も検討することをお勧めします。

于 2013-03-19T16:11:31.133 に答える