2017-01-25 78 views
-4

我目前有java作業,我將不勝感激一些幫助。我們要計算一個團隊記錄場景。
我們給出以下號碼:
TEAM1點 {23,45,65,20}如何從數組中提取數字

對手點數 {20,30,20,18}

我把這些放到一個數組。我也創建了一個公共布爾值。基本上,你將這些點從數組拉到布爾值?讓布爾決定哪支隊伍贏了?很顯然team1贏了,但我們應該讓計算機決定,而不是人。

這裏是我的代碼:

public class TeamScore { 

public static boolean Winner(int team1Points, int opponentPoints) { 
    if (team1Points > opponentPoints) { 
     return true; 
    } else { 
     return false; 
    } 
} 

public static void main(String[] args) { 
    // Scanner in = new Scanner(System.in); 
    int[] team1Points = { 23, 45, 65, 20 }; 
    int[] opponentPoints = { 20, 30, 20, 18 }; 
    int team1 = 1; 
    int opponent = 1; 

    for (int i = 0; i < 5; i++) { 
     if (Winner(team1Points[i], opponentPoints[1])) { 
      team1 += 1; 
     } else { 
      opponent += 1; 
     } 
    } 

    for (int i = 0; i < 5; i++) { 
     if (team1 > 0 && opponent == 0) { 
      System.out.println("Team 1 has the perfect record!"); 
     } else { 
      System.out.println("Win" + Arrays.toString(team1Points)); 
      System.out.println("Loss" + Arrays.toString(opponentPoints)); 
     } 
    } 
} 

誰能可能幫助我嗎?我目前在編程II,但在編程中我沒有最好的老師。任何幫助將不勝感激!

編輯:
我不認爲這是一個重複的問題,因爲我已經可以通過更改變量i - > 1來解決它。我的問題是,電腦認爲team1已經贏了,不管比分如何。

當我運行代碼時,我得到一個java.lang.ArrayIndexOutOfBoundsException錯誤。但是,當我將team1Points[i]更改爲team1Points[1]時,它會好起來,並告訴我「第1隊有完美的記錄!」。但是,如果我將team1Points的某些數組值更改爲小於opponentPoints,那麼它仍然表示「第1隊有完美的記錄!」。

+0

我會使用一個好的縮進來提高可讀性。那些括號不在場所。問題是什麼 ? – AxelH

+0

當我運行代碼時,出現越界錯誤。但是,當我將'team1Points [i]'更改爲'team1Points [1]'時,那麼它會很好,並告訴我''1隊有完美的記錄!'「。但是,如果我將'team1Points'的某些數組值改爲小於'opponentPoints',那麼它仍然會說'「Team 1有完美的記錄!」。我只是想明白這一點。它一直很辛苦:/ –

+0

for(int i = 0; i <5; i ++){'將從'i = 0'循環到'i = 4',但是你有一個4 int的數組[ 0]'到'[3]' – AxelH

回答

0

不知道爲什麼你有一個方法贏家(也如凱文說,它應該是贏家,因爲命名約定)將'(a> b)'變成一個大的if語句。類似的東西出現在代碼的其他地方。

您的變量'team1,opponent = 1'莫名其妙地從值1開始,我是否理解這是您的代碼暗示給讀者的一種方式,即兩個團隊都初始化勝利?使用0可能會更有意義。您的遊戲應該從'team1Points [i]'的indexoutofboundsexception崩潰,因爲您的數組長度爲4,但循環運行5次(當前使用的範圍爲[0-4],包括)。將您的循環更改爲i = 1將無濟於事,因爲問題在於您最終因i < 5聲明而遇到team1Points[4]。我不知道你在做什麼遊戲或者它是如何工作的,但比較'勝利者(team1Points [i],opponentPoints [1])'對我來說看起來是一個公然的錯誤(你總是看着對手他們的第二輪得分)。

爲什麼您打印結果5次?如果你想打印第一條消息,那麼只有當team1贏得所有輪次時纔會打印第一條消息,否則你需要使用循環計數器作爲第二種情況下數組的索引。第一種情況應該打破循環,所以它不寫五次,此外,你不需要檢查team1>0 && opponent==0,因爲它只是檢查'對象== 0'(說到這個條件,它只適用於如果你初始化變量在0,如前所述)。你可以檢查一下,如果team1等於數組的大小,但是這樣比opponent==0更麻煩。

最後,請修復您的縮進。使用預覽系統,以便在發佈之前進行雙重確認。

編輯:凱文還提出了一個很好的觀點,你應該在循環第二條語句中使用數組的長度。

+0

感謝您的回覆,我很感激。我已經嘗試了一些建議,但他們似乎沒有太大變化。這項任務的目的是讓計算機決定誰贏了給定的數字。正如我之前說的,球隊1明顯贏了,但這是由電腦決定的。最好的是做這件事。我不想直接回答,我想了解我的錯誤以備將來參考。 –

+0

如果你仍然在'team1Points [i]'接收到一個'IndexOutOfBoundsException',那麼理由寫在我的第三段中,並且凱文給出了一個解決方案。在循環中,計數器'i'應該遍歷時間間隔'[0,array#length'],因爲試圖訪問該範圍之外的任何索引都會導致異常。 – felix

+0

感謝您的幫助!我終於修好了! –