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());
}
我试图循环遍历对象并每次都更新一个变量,我有一个具有以下所有变量的播放器 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());
}