将一个String和一个int添加到ArrayList中的相同位置

时间:2014-06-04 19:47:53

标签: java arraylist

我正在制作一款游戏,我可以计算完成游戏所需的大量点击次数。我想将大量的点击次数和玩家的名字添加到ArrayList中。目标是使得有可能像某种高分表一样安排分数。

问题是,我如何做到这一点,以便将hte播放器的名称和点击量存储在同一位置,这样当我安排高分时,玩家名称将保持与点击量的连接?

5 个答案:

答案 0 :(得分:1)

只需创建一个包含所需信息的类。

class PlayerClicks{
    private String palyerName;
    private int clicksCount;

    // add more data if needed
    // getter & setter
}

现在创建ArrayList类型PlayerClicks对象,例如

List<PlayerClicks> list = new ArrayList<PlayerClicks>();

现在回答你的问题:我们的目标是能够像某种高分榜一样安排分数。

只需创建一个Map<Integer,List<PlayerClicks>>,其中包含List<PlayerClicks>作为值并将得分作为关键字,例如

Map<Integer,List<PlayerClicks>> highScores = new TreeMap<Integer,List<PlayerClicks>>();
默认情况下,

TreeMap按键分数排序。现在获得所有具有相同分数的球员名单。

答案 1 :(得分:1)

ArrayList可以在每个位置存储一个元素。因此,如果必须使用ArrayList,则可以定义要存储在列表中的Score对象:

public class Score {

    private String name;
    private int score;

    public Score(String n, int s) {
        name = n;
        score = s;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getScore() {
        return score;
    }
    public void setScore(int score) {
        this.score = score;
    }
}

...并在ArrayList中添加Score对象:

ArrayList<Score> highScores = new ArrayList<Score>();
highScores.add( new Score("Tom",22) );
highScores.add( new Score("Dick",17) );
highScores.add( new Score("Harry",19) );

答案 2 :(得分:1)

我会维护一个包含名称和点击次数的对象列表。为了使它像高分表一样工作,让对象的类实现可比较,然后在列表上调用Collections.sort()。这是一个如何工作的例子:

import java.util.ArrayList;
import java.util.Collections;

public class HighScoreTest {

    static class Player implements Comparable<Player>{
        private String name;
        private int clicks;

        public Player(String name, int clicks){ this.name = name; this.clicks = clicks; }
        public String getName(){ return name; }
        public int getClicks(){ return clicks; }

        @Override
        public int compareTo(Player o) {
            return Integer.compare(o.clicks, clicks);
        }
    }

    public static void main(String[] args) {
        ArrayList<Player> players = new ArrayList<Player>();

        players.add(new Player("Mark", 3));
        players.add(new Player("Jane", 5));
        players.add(new Player("Bert", 4));

        Collections.sort(players);

        for (Player p : players) {
            System.out.println(p.getName() + " has " + p.getClicks() + " clicks!"); 
        }
    }

}

打印:
简有5次点击!
伯特有4次点击!
马克有3次点击!
...表现得像一个高分,易于使用,不需要地图。它还将支持具有相同点击量的玩家。

答案 3 :(得分:0)

好吧,你可以创建一个Map<String, Integer>,其中字符串是玩家的名字,整数是分数。

然后,您可以将所有内容放入列表中。

答案 4 :(得分:0)

您应该使用Map<String, Integer>,其中键将是用户名,值将是点击次数。

一个例子:

    private Map<String, Integer> scores = new HashMap<>();

    private incrementScore(String userName) {
        Integer newScore = scores.get(userName) + 1;
        scores.put(userName, newScore);
    }