Java高分榜

时间:2016-06-02 11:39:22

标签: java arrays class arraylist

所以我在学校的最后一个项目有问题。我正在创建一个高分榜单的游戏,但我需要有十个人出现,而且我只有5个人,我没有一个线索如何解决它。

import java.util.*;
    import java.io.*;

    public class HighscoreManager {
        // Sparar alla poäng i filen "scores.dat", filen skapas här
        private static final String HIGHSCORE_FILE = "scores.dat";

        // En arraylista med typen score
        ArrayList<Score> scores;

        // Startar en in och en utström för att skicka och ladda in information från
        // filen
        ObjectOutputStream outputStream = null;
        ObjectInputStream inputStream = null;

        public HighscoreManager() {
            // För att kunna arbeta med listan behövs en variabel dvs. Arraylistan
            // scores
            scores = new ArrayList<Score>();
            // Det är med classen Arraylist<score> getScores() som arrayen skapas
            // forts
        }

        public ArrayList<Score> getScores() {
            // ...forts-> och här används loadScoreFil() och sort(), returnerar
            // värdet scores som används i HighscoreManager
            loadScoreFile();
            sort();
            return scores;
        }

        private void sort() {
            // Här blir det komplicerat, kort och gott så skapas "comparator", ifrån
            // ScoreComparator.java, den sorterar scores med hjälp av just
            // collections(från java).sort(x,y)
            ScoreComparator comparator = new ScoreComparator();
            Collections.sort(scores, comparator);
        }

        public void addScore(String name, int score) {

            loadScoreFile();
            scores.add(new Score(name, score));
            updateScoreFile();
        }

        public void loadScoreFile() {
            //Se updateScoreFile
            try {
                inputStream = new ObjectInputStream(new FileInputStream(
                        HIGHSCORE_FILE));
                scores = (ArrayList<Score>) inputStream.readObject();
            } catch (FileNotFoundException e) {
                System.out.println("");
            } catch (IOException e) {
                System.out.println("io problem: " + e.getMessage());
            } catch (ClassNotFoundException e) {
                System.out.println("cnf problem: " + e.getMessage());
            } finally {
                try {
                    if (outputStream != null) {
                        outputStream.flush();
                        outputStream.close();
                    }
                } catch (IOException e) {
                    System.out.println("io problem: " + e.getMessage());
                }
            }
        }

        public void updateScoreFile() {
            try {
                // Med serializerade Score.java så används outputStream för att
                // skicka till HIGHSCORE_FILE som är scores.dat

                outputStream = new ObjectOutputStream(new FileOutputStream(
                        HIGHSCORE_FILE));
                outputStream.writeObject(scores);
            }
            // resten är catch som kan göras om för att visa felmeddelanden, jag
            // gjorde bara en basic.
            catch (FileNotFoundException e) {
                System.out.println("File Not Found, run the program again to fix.");
            } catch (IOException e) {
                System.out.println("IO problem, run the program again to fix.");
            }

            finally {
                try {
                    if (outputStream != null) {
                        outputStream.flush();
                        outputStream.close();
                        // Detta displayar poängen så länge det finns något att
                        // displaya
                    }
                } catch (IOException e) {
                    System.out
                            .println("Update problem, run the program again to fix.");
                }
            }
        }

        public String getHighscoreString() {
            // Här skapas själva texten som ska visas, nästan slutstation för
            // highscoret

            // Skapar Stringen highscoreString och sätter en maxgräns för hur många
            // highscores som ska vara med.
            String highscoreString = "";
            int max = 10;

            // Sammanställer poängen
            ArrayList<Score> scores;
            scores = getScores();

            // while loop som printar ut ett highscore i taget, när i < max så
            // skrivs scores1,scores2 etc ut och plussar
            // på i och processen repeteras tills i = x, då returneras värdet som är
            // highscoreString och kan användas i tamain.
            int i = 0;
            int x = scores.size();
            if (x > max) {
                x = max;
            }

            while (i < x) {
                highscoreString += (i + 1) + ".\t" + scores.get(i).getNamn() + "  "
                        + scores.get(i).getScore() + "\n";
                i++;
            }

            return highscoreString;
        }
    }

1 个答案:

答案 0 :(得分:0)

我为你的代码做了一个JUnit测试,并尝试将十个分数写入得分.dat文件。然后我尝试阅读scores.dat文件,分数列表包含10个分数。你的代码似乎正在运作。

你在scores.dat文件中得分超过五分吗?

我运行了以下测试: public class HighscoreManagerTest { @Test public void shouldReturnTenHighscores(){ HighscoreManager highscoreManager = new HighscoreManager(); highscoreManager.addScore("Player 2", 998); highscoreManager.addScore("Player 1", 999); highscoreManager.addScore("Player 5", 995); highscoreManager.addScore("Player 3", 997); highscoreManager.addScore("Player 4", 996); highscoreManager.addScore("Player 6", 994); highscoreManager.addScore("Player 7", 993); highscoreManager.addScore("Player 8", 992); highscoreManager.addScore("Player 9", 991); highscoreManager.addScore("Player 10", 990); ArrayList<Score> scores = highscoreManager.getScores(); System.out.println( highscoreManager.getHighscoreString() ); Assert.assertEquals( 10 , scores.size() ); } }