字符串不能转换为(类名数据类型)Java
我试图创建一个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";
}
}
你的代码中有几个问题:
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";
}
}
}
问题:
- 甲板阵列不成立String对象,但你”重新尝试将它们放入数组中。编译器向你抱怨说这是不允许的。
- 如果你做了你的代码最初表明它想做的事 - 在SetDeck构造函数中创建80个SetDeck对象,这将导致无限递归,因为这80个SetDeck对象中的每一个的构造函数都会被调用,这些构造函数会创建另外80个SetDeck对象,这些对象将创建80个以上的SetDeck对象,这些对象将创建80个以上的SetDeck对象,直到程序用完堆栈内存为止。另外,SetDeck在实例字段中保存一堆本身是没有意义的。可能是一个静态字段,但不是在这种情况下。
- 您提到卡组将卡持卡对象,但您的代码不显示卡类。
- 您声明Card对象具有某些属性,包括颜色,形状,填充或不填充,但您只在尝试填充阵列时创建颜色字符串。
解决方案:
- 创建一个卡类,一个是对你提到的所有属性的字段。
- 创建一个甲板类,让它拥有一张卡片阵列,或者更好的卡片
ArrayList<Card>
。 - 在您的卡座构造函数中填充卡片集合。
- 不要试图让字符串的东西,他们不是。
- 避免在填充数组或集合时使用“魔术”数字。 Array有一个你希望在for循环中使用的length属性,而ArrayList有一个
size()
方法来提供类似的功能。
上帝我一直在为这个单纯的拼写错误而苦苦挣扎。我觉得自己是有史以来最大的白痴。谢谢。 –
@DylanKelemen:你有卡类吗? –
还没有这个课程将介绍我上面提到的属性,我只是努力开始这一切。这位教授坚持说,我必须按顺序排队,以便在我首先解决问题之前,我不能做其他事情。我现在看到了我命名类和构造函数相同的事实。我打算从我的其他班级使用SetCard。感谢你对我犯过的错误提供了非常丰富的回应。 –
声明
private String[] deck;
和
deck = new String[81];
会解决这个问题
这将消除错误消息,但它不会解决问题。 –
@HerbWolfe ofcourse that is my point – Antoniossss
public class SetDeck{
private SetDeck [] deck;
您embeding同一类为本身。你应该有一个卡片类,它有颜色,形状,数字和阴影。然后将一个数组或ArrayList的卡片嵌入到SetDeck类中,并在SetDeck构造函数中填充该数组或ArrayList。
您的卡组数组包含SetDeck对象,而不是String对象,并且您试图用String填充它。但是你的设计似乎没有了 - 如果你做得正确,如果你用有效的SetDeck对象填充该数组,代码将抛出一个StackOverflow。为什么SetDeck会保存一个自己的数组? –
你的班级缺少变量来保存每张卡片的颜色,形状,数量和底纹。 –