This question already has answers here:
Java Static vs Instance
                                
                                    (9个答案)
                                
                        
                                4年前关闭。
            
                    
我正在开发一个程序,允许用户在四支球队之间选择一支主场和客场橄榄球队。我创建了一个通用的超类团队,该团队定义了每个安全性/射门得分/着陆点所分配的分数。生成一个随机数,然后基于该数字,程序逐步执行条件if / else语句以确定动作和分数。

这是在超类中:

public void possessionPoints()
{
    if(points<lowNopoints){
        score = noPoints;
        totalScore = totalScore + score;
        System.out.println("No points, plus " + score);
    }
    else if(points<lowSafetypoint){
        score = safetyPoint;
        totalScore = totalScore + score;
        System.out.println("Safety, plus" + score);
    }
    else if(points<lowFieldgoal){
        score = fieldGoal;
        totalScore = totalScore + fieldGoal;
        System.out.println("Field goal, plus" + score);
    }
    else{
        score = touchDown;
        totalScore = totalScore + touchDown;
        System.out.println("Touchdown, plus" + score);
    }

    ArrayList<Integer> totalScore;
    totalScore = new ArrayList<>();
    totalScore.add(score);

    //the sum score
    int sum = totalScore.stream().mapToInt(Integer::intValue).sum();
    System.out.println("Current score is: " + sum);
}


注意:以上totalScore初始化为public static int totalScore = 0;

在整个过程中,我想跟踪totalScore。我在超类中拥有此设置,但是,当程序运行时,它会在整个游戏中加总得分,并且不会区分团队。


  输出:
  
  主队行动。
   没有分数加0
   当前得分:0
  
  客队动作。
   射门得分,再加上3
   当前得分:3
  
  主队行动。
   射门得分,再加上3
   目前得分:6
  
  客队动作。
   射门得分,再加上3
   目前得分:9
  
  主队行动。
   安全加2
   目前得分:11


另外,如果有帮助,这就是我在下面的其他团队的每个子类中设置的所有内容。我对totalScore不做任何事情。

public class PackersSub extends GenericSuper{
public PackersSub()
{
    lowNopoints = 4;
    lowSafetypoint = 5;
    lowFieldgoal = 7;
}


有关如何解决此问题的任何想法?我想跟踪每个团队的totalScore。谢谢!

最佳答案

如果要跟踪每个团队的级别,则应将其定义为成员变量,以便每个团队都有自己的totalScore字段副本。

在超类中归档static意味着它将始终是子类中正在发生的所有动作的总和。因为每个类仅维护一个static字段的副本。在您的情况下,您已在超类中对其进行了定义,这使其成为得分汇总的全局字段。

07-24 18:49