2017-04-06 69 views
0

這是作業。我有一個工作計劃,但它沒有按照預期完全工作。目標是創建一個紙牌類,這是一個基本的紙牌遊戲。沒有顏色沒有西裝只是整數。整數1-15是最大卡數。 piles = new ArrayList()//實例變量 通過將MathList的構造函數初始化爲通過Math.random()的隨機數堆,開始遊戲。 我的問題是遊戲結束。當我們有5堆包含大小爲1,2,3,4,5 的任意順序時,遊戲結束。 我有我的over()函數檢查通過比較數組,但只檢查確切的順序1,2,3,4,5。 我的教授說以下 「ArrayList Java庫方法可以使這個實驗太容易了,因此使用樁可以使用 只有這些庫方法:構造函數; add(); size(); set(); get(); remove (); 的indexOf();的toString()如何使用ArrayList的indexOf()方法到

在()如果紙牌超過 返回真,否則返回假 的紙牌是當樁具有尺寸1,2,3,4上,並5,以任意順序(可以是 表明你總是以這樣的配置結束。) 提示:使用indexOf()。「

我一直在嘗試在此應用程序中使用indexOf(),但我無法看到該方法如何能夠以任何順序檢查堆的大小。它只是獲得列表中任何元素的索引,所以對我來說沒有意義。

這裏是紙牌測試類的源代碼,我不能改變:

public class SolitaireTester 
{ 
public static void main(String[] args) 
{ 
    Solitaire s = new Solitaire(); 

    System.out.println("Start: " + s.toString()); 

    int rounds = 0; 
    while (!s.over()) { 
     s.round(); 
     ++rounds; 
     System.out.println(rounds + ": " + s.toString()); 
    } 
    System.out.println("Rounds: " + rounds); 
} 
} 

,這裏是我的紙牌類代碼的一部分,在()方法

public boolean over() 
{ 

int[] perfectPiles = {1,2,3,4,5}; 
boolean result = true; 



for (int i = 0; i < piles.size(); i++) 
{ 
    if(perfectPiles[i] != piles.get(i)) 

    { 
     result = false; 
     break; 
    } 
} 
return result; 
} 

再次我的問題是我怎麼能使用indexOf()檢查布爾意義上的perfectPiles,以便樁的大小順序無關緊要,只要它包含元素1,2,3,4,5。我們再次不能使用contains()方法。謝謝,我會感謝任何幫助!如果需要,我可以發佈更多的代碼,只是不想讓同行複製我的所有代碼。

+0

是什麼'piles'看起來像 – SomeDude

+0

你需要比較反對它似乎大小,而不是第i個項目,你需要檢查所有排列,除非你面前樁按大小排序。 – maraca

+0

@ma raca我認爲OP已經濫用了「size」這個詞,考慮到OPs教授暗示要使用indexOf()方法,當然這意味着你只需要檢查該項是否包含在列表中而不是其他任何東西。 –

回答

0

再次我的問題是我怎麼能使用的indexOf()來覈對 perfectPiles在布爾感,使得 堆的大小順序並不重要,只要它包含的元素1, 2,3,4,5。 我們再次不能使用contains()方法。

首先,我們來看看您想要使用的indexOf()方法的用途。

返回指定元素中第一次出現的索引 此列表,或-1,如果此列表中不包含的元素。更多 正式返回最低索引i,使得(o == null?get(i)== null :o.equals(get(i)))或-1(如果沒有這樣的索引)。

考慮到這一點,你的「教授」要你使用indexOf()因爲它是相當類似方法在某種程度上,這你說,這是不允許這種鍛鍊你的事。通過使用indexOf()我們可以同意,如果它返回-1那麼它的而不是包含在列表中,如果它返回任何其他號碼,則它是包含在列表中。

您已指出另外重要的一點是:

接龍是當樁具有尺寸1,2,3,4,5,在 任何順序上。 (可以證明,你總是這樣的 配置收場。)提示:使用的indexOf()「

有了這些想法,改變你目前的解決方案:

public boolean over(){ 
    int[] perfectPiles = {1,2,3,4,5}; 
    boolean result = true; 

    for (int i = 0; i < piles.size(); i++){ 
      if(perfectPiles[i] != piles.get(i)){ 
       result = false; 
       break; 
      } 
    } 

    return result; 
} 

到這樣的:?

public boolean over(){ 
    int[] perfectPiles = {1,2,3,4,5}; 

    for (int i = 0; i < perfectPiles.length; i++){ 
      if(piles.indexOf(perfectPiles[i]) == -1) return false; 
    } 

    return true; 
} 
+0

如果您有任何其他問題,請隨時在此通知我。 –