2016-12-03 169 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

相关问题