Java 循环遍历对象

Java cycling through objects

我试图循环遍历对象并每次都更新一个变量,我有一个具有以下所有变量的播放器 class:

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

我想从头到尾遍历每个变量,并为每个玩家添加每次走棋的分数(所有玩家都在一个数组列表中)。

我不确定最好的方法是什么,有没有办法 select 一个特定的对象,然后根据谁去添加变量。

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

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

您可以使用简单的 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];

所以你可以使用另一个 for 循环。

如果我没看错这道题,每个选手都有名字,11个分数,和总分。您似乎在问如何遍历玩家列表并使总数等于 11 个分数的总和。

一种更常用的(在 OO 语言中)方法只是确保总分 总是 等于 11 个分数的总和。 (这称为 "encapsulation",是所有 object-oriented 编程背后的基本思想。)这很容易实现(为了便于编程,我将分数放在数组中):

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());
}