Java循环遍历对象

时间:2018-02-28 14:44:23

标签: java arrays object javafx-8

我试图循环遍历对象并每次更新变量,我有一个具有以下所有变量的Player类:

Name, s1 ,s2, s3,...., s11, total

我想从开始到结束遍历每个变量,并为每个玩家添加每个玩家的得分(所有玩家都在数组列表中)。

我不确定这样做的最佳方法是,有没有办法选择一个特定的对象,然后根据它是谁来添加变量。

如果您需要更多信息,请提前询问并感谢您提供的任何帮助。

public void  addScore(int turn, int score){
    Player.setScore( turn, score);
}

2 个答案:

答案 0 :(得分:1)

您可以使用简单的for循环数组列表,如下所示:

ArrayList<Player> players = ...;
for (int i = 0; i < players.size(); i++) {
    /*Operations on players[i] = the current player*/
}

要获取和修改播放器的变量,您可以为每个参数创建getter和setter方法,如下所示:

private String name;

public String getName(){
    return name;
}

public void setName(String name){
    this.name = name;
}

如果你有很多相同类型的变量(s1,s11),请使用数组:

int[] scores = new int[11];

所以你可以用另一个来循环。

答案 1 :(得分:0)

如果我正确理解这个问题,每个玩家都有一个名字,11个分数和一个总分。你似乎在问如何迭代一个玩家列表,并使总数等于11个得分的总和。

更常见的(在OO语言中)方法只是为了确保总数总是等于11个分数的总和。 (这称为“封装”,是所有面向对象编程背后的基本思想。)这很容易实现(为了便于编程,我把分数放在一个数组中):

public class Player {

    private String name ;
    private int[] scores ;
    private int total ;

    public Player(String name) {
        this.name = name ;
        this.scores = new int[11] ; // all initialized to zero, as is total.
    }

    public void setScore(int whichScore, int score) {
        int change = score - scores[whichScore] ;
        scores[whichScore] = score ;
        total = total + change ;
    }


    public int getScore(int whichScore) {
        return scores[whichScore] ;
    }

    public int getTotal() {
        return total ;
    }

    public String getName() {
        return name ;
    }

    public void setName(String name) {
        this.name = name ;
    }
}

现在你的问题是多余的:total总是等于得分的总和,所以没有必要遍历玩家来计算你代码中任何地方的总数。您可以通过

获得每位玩家的总数
for (Player p : listOfPlayers) {
    System.out.println("Player "+p.getName()+" has total score "+p.getTotal());
}