2016-12-03 88 views
0

我試圖創建一個Set遊戲(www.setgame.com)作爲學校項目的一部分。這個班級應該帶一副81張卡片,並給他們分配一個顏色,形狀,數字和陰影。我試圖只是先做顏色部分,所以我知道如何進入正確的軌道並完成其餘的部分,並且因此簡化了它,使它們都變成了「紅色」。 我不斷收到一條錯誤消息,說java.lang.String不能轉換爲SetDeck。我不知道我是如何解決這個問題的。這導致我的問題的下一部分如何混合我的數組包含字符串元素和int元素。從我做過的研究來看,這是一個不錯的,雖然它可以完成,但如果它們是分開的,那麼它更容易實現。儘管我很樂意這樣做,但項目最終還是希望從數組中打印輸出,例如array [0] =「red oval 1 filled」。我在這堂課寫的這段代碼如下。字符串不能轉換爲(類名數據類型)Java

如果您需要任何進一步的解釋或澄清,請詢問。我沒有預先的編碼經驗,所以我會盡我所能進一步解釋。

public class SetDeck{ 

private SetDeck [] deck; 
private int top; 
public SetDeck(){ 
    top = 0; 
    deck = new SetDeck[81]; 
    for(int r = 0; r < 80; r++){ 
     deck[r] = "red"; 
    } 
} 
+0

您的卡組數組包含SetDeck對象,而不是String對象,並且您試圖用String填充它。但是你的設計似乎沒有了 - 如果你做得正確,如果你用有效的SetDeck對象填充該數組,代碼將拋出一個StackOverflow。爲什麼SetDeck會保存一個自己的數組? –

+0

你的班級缺少變量來保存每張卡片的顏色,形狀,數量和底紋。 –

回答

3

你的代碼中有幾個問題:

public class SetDeck{ 
    private SetDeck [] deck; 

首先你內的SetDeck類創建SetDeck 的一個實例數組變量。然後在構造函數中嘗試差不多用String填充這個數組。我說差不多,因爲你已經聲明數組持有81項,但你只填寫其中的80:

public SetDeck() { 
     top = 0; 
     deck = new SetDeck[81]; 
     for(int r = 0; r < 80; r++){ 
      deck[r] = "red"; 
     } 
    } 
} 

問題:

  1. 甲板陣列不成立String對象,但你」重新嘗試將它們放入數組中。編譯器向你抱怨說這是不允許的。
  2. 如果你做了你的代碼最初表明它想做的事 - 在SetDeck構造函數中創建80個SetDeck對象,這將導致無限遞歸,因爲這80個SetDeck對象中的每一個的構造函數都會被調用,這些構造函數會創建另外80個SetDeck對象,這些對象將創建80個以上的SetDeck對象,這些對象將創建80個以上的SetDeck對象,直到程序用完堆棧內存爲止。另外,SetDeck在實例字段中保存一堆本身是沒有意義的。可能是一個靜態字段,但不是在這種情況下。
  3. 您提到卡組將卡持卡對象,但您的代碼不顯示卡類。
  4. 您聲明Card對象具有某些屬性,包括顏色,形狀,填充或不填充,但您只在嘗試填充陣列時創建顏色字符串。

解決方案:

  • 創建一個卡類,一個是對你提到的所有屬性的字段。
  • 創建一個甲板類,讓它擁有一張卡片陣列,或者更好的卡片ArrayList<Card>
  • 在您的卡座構造函數中填充卡片集合。
  • 不要試圖讓字符串的東西,他們不是。
  • 避免在填充數組或集合時使用「魔術」數字。 Array有一個你希望在for循環中使用的length屬性,而ArrayList有一個size()方法來提供類似的功能。
+0

上帝我一直在爲這個單純的拼寫錯誤而苦苦掙扎。我覺得自己是有史以來最大的白癡。謝謝。 –

+0

@DylanKelemen:你有卡類嗎? –

+0

還沒有這個課程將介紹我上面提到的屬性,我只是努力開始這一切。這位教授堅持說,我必須按順序排隊,以便在我首先解決問題之前,我不能做其他事情。我現在看到了我命名類和構造函數相同的事實。我打算從我的其他班級使用SetCard。感謝你對我犯過的錯誤提供了非常豐富的迴應。 –

-1

聲明

private String[] deck; 

deck = new String[81]; 

會解決這個問題

+1

這將消除錯誤消息,但它不會解決問題。 –

+0

@HerbWolfe ofcourse that is my point – Antoniossss

4
public class SetDeck{ 

    private SetDeck [] deck; 

您embeding同一類爲本身。你應該有一個卡片類,它有顏色,形狀,數字和陰影。然後將一個數組或ArrayList的卡片嵌入到SetDeck類中,並在SetDeck構造函數中填充該數組或ArrayList。

+0

@HovercraftFullOfEels是的。現在我們可以在未來更好地相處嗎?我知道只要我願意,你會在這裏。 – byxor

+0

@BrandonIbbotson:對不起,我真的不記得過去與你的互動,或者特別是糟糕的互動。如果我粗魯,我誠實地要求原諒。 –

+0

@HovercraftFullOfEels你並不粗魯,但我們的觀點之前曾多次發生衝突。我希望有一個更美好的未來。問候。 – byxor

相關問題