2015-12-13 33 views
1

我正在制定一個程序,允許用戶選擇四個隊之間的主客場球隊。我創建了一個通用超類團隊,它定義了每個安全/現場目標/觸地點分配的點數。生成一個隨機數,然後基於該數字,程序通過條件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被intialized爲public static int totalScore = 0;

縱觀這一切,我想保留totalScore軌道。我在超類中有這樣的設置,但是,當程序運行時,它將整個遊戲的分數加起來,並且不區分團隊。

輸出:

主隊行動。 沒有積分,加0 當前積分:0

客隊的行動。 射門得分,加3 當前得分:3

主隊的行動。 現場進球,加3 當前積分:6

客隊的行動。 射門得分,加3 當前得分:9

主隊的行動。 安全,PLUS2 當前得分:11

另外,如果有幫助,這是所有我在每個子類下面的其他球隊設置。我不對totalScore做任何事情。

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

有關如何解決此問題的任何想法?我想跟蹤每隊的totalScore。謝謝!

+0

@SURESH ATTA我已經看過「Java靜態與實例」問題。它幫助我理解靜態變量是錯誤的類型。但是,它不能幫助我回答解決此問題的具體問題。 //我不確定是否應該在超類中使用'totalScore',只是修改設置或者是否應該將它放在其他位置? – PametnaGabi

回答

1

如果你想在每個團隊級別保持跟蹤,那麼你應該將其定義爲成員變量,這樣每個團隊將擁有它自己的totalScore副本。

在超類中提交static意味着它始終是子類中發生的所有動作的總和。因爲每個類只維護static字段的一個副本。在你的情況下,你已經在超類中定義了它,這使得它成爲分數聚合的全球領域。

+0

你能否澄清?我刪除了「static」這個詞,但是然後「totalScore」在程序中根本沒有加起來。 我現在明白了,靜態會使'totalScore'變量在整個超類和所有子類中保持一致。但是,應該在哪裏進行更改以及如何進行? – PametnaGabi

+0

@PametnaGabi你需要將它作爲你的子類的一部分,它代表了這裏的團隊。 – YoungHobbit

相關問題