Java 匹配博弈-集卡法
尝试创建一个方法,该方法接受一个“数字”,然后使用该数字,它进入一个全局Java 匹配博弈-集卡法,java,arraylist,Java,Arraylist,尝试创建一个方法,该方法接受一个“数字”,然后使用该数字,它进入一个全局arraylist,并使用一系列if-else语句将位置“number”的图标更改为某个图标 问题是我不知道怎么去拜访那个地方 如果没有方法,我会这样编码 card1.seticon(a); 我会对所有if-else语句和arraylist中的所有项手动执行此操作 如何使其动态化,使“卡片”后面的数字以相同的方式不断变化 到目前为止,这是我的方法&我想用一个变量或一些动态的东西来替换这些方法: public void s
arraylist
,并使用一系列if-else语句将位置“number”的图标更改为某个图标
问题是我不知道怎么去拜访那个地方
如果没有方法,我会这样编码
card1.seticon(a);
我会对所有if-else语句和arraylist
中的所有项手动执行此操作
如何使其动态化,使“卡片”后面的数字以相同的方式不断变化
到目前为止,这是我的方法&我想用一个变量或一些动态的东西来替换这些方法:
public void setCards(int cardNumber) {
String temp = cards.get(cardNumber);
switch (temp) {
case "0":
card1.setIcon(a);
break;
case "1":
Card1.setIcon(b);
break;
case "2":
Card1.setIcon(c);
break;
case "3":
Card1.setIcon(d);
break;
case "4":
Card1.setIcon(e);
break;
case "5":
Card1.setIcon(f);
break;
case "6":
Card1.setIcon(g);
break;
case "7":
Card1.setIcon(h);
break;
}
}
构建一个映射
,键是“0”、“1”…“7”、“任意”
,值是图标a、b、c…h…任意图标
然后您只需card1.setIcon(map.get(cards.get(cardNumber)))
(上一行中省略了验证。)为所有实例创建一个继承树
abstract class Card {
protected String icon;
public Card(String icon) {
this.icon = icon;
}
public String getIcon() {
return this.icon;
}
}
下面是子类的一个示例:
class CardA extends Card {
public CardA() {
super("Icon A");
}
}
用你所有的牌做类似的事情。之后,您可以执行以下操作:
List<Card> cardList = new ArrayList<Card>();
cardList.add(new CardA());
cardList.add(new CardB());
将打印:
Icon A
Icon B
如您所见,通过此过程,您可以创建和添加任何子类,而不必修改以前创建的类。千万不要这样做。首先,永远不要忘记switch case语句。使用
映射
或任何其他适用的多态形式。此外,全球性是根本的邪恶。也忘掉它们吧。在这里,我并不100%清楚你的意图是什么。虽然它们并不适合完全的初学者,但我强烈推荐你两本读物:“#1”这本书会给你很多关于如何解决问题的提示,比如你的问题“我如何使它充满活力以便……”。考虑到“尝试创建一个接受“数字”的方法,然后使用该数字,…(!!!)将位置“数字”的图标更改为某个图标”,您可以使用地图,然后发布cards.get(id).setIcon(icons.get(id))
,完全省略“cardNumber”部分,因为您可能不需要它。但是,我不确定你的目标。。。附言:!!!=不要将实现细节放在需求中。描述要做什么,而不是如何做。为什么要为所有具有相同行为的卡创建子类?没有abstract
关键字的Card
类似乎是合适的,尽管如果图标要根据某种逻辑进行更改,也应该引入setter方法。我认为图标不是唯一的区别。不同类型的卡片也可能有不同的行为(我知道作者没有提到这一点)。通过这种方法,@sdx可以轻松地以政治化的方式实现其他事情。当然,如果图标只是不同的属性,那么地图将是更好的选择。我明白了。我的假设正好相反:即使图标不是唯一的区别,但卡片之间的区别只体现在数据上,它们共享相同的功能。但实际上我不知道OP的问题的背景是什么。。。
Icon A
Icon B