我定义了一个名为" map"的对象数组。和20个元素的预留空间, 在课堂上" Coin"我已经创建了构造函数,它将随机coinValue分配给每个硬币并将其放入数组映射中。 此外,我还有一个班级选手,其中包括counstructor和getter / setter设置为Player 1和Player 2。 类TrafficLight是一个线程,但这对我的问题并不重要,因此我将其留在代码中以避免混淆。 然后我创建了四个Coin对象并将它们分配给我的" map"中的一些指定索引。阵列。 现在我需要创建Traffic light和Coin对象并将它们放在Object []地图中。 现在,代码如下所示:
更新: 如果Coin和TrafficLight都在Object类型的数组中,我仍然不知道如何访问getCoinValue。
FIX: 我通过显式转换Coin对象来修复此问题:
Coin coin= (Coin)map[position];
currentCoinValue += coin.getCoinValue();
剩下的代码......
public static boolean RaceEnd = false;
public static void main(String[] args) {
Object[]map = new Object[20];
Player player = new Player("Jack", "Max");
map[8]= new Coin(100);
map[1]= new Coin(100);
map[17]= new Coin(100);
map[19]= new Coin(100);
map[4]= new Coin(100);
map[13]= new Coin(100);
TrafficLight s = new TrafficLight(0,1);
map[7] = new TrafficLight(0,1);
map[18] = new TrafficLight(2,1);
int currentCoinNumber = 0;
for (int position= 0; position< map.length; position++) {
if (position==19) {
RaceEnd = true;
System.out.println(player.getPlayer1() + " finished the race!");
// s.interrupt();
break;
} else {
if (map[position] != null && map[position] instanceof Coin) {
Coin coin= (Coin)map[position];
currentCoinValue += coin.getCoinValue();
> THE CASTING IS NOT AN OPTION,STILL SHOWS UNDEFINED
System.out.println(player.getPlayer1() + " has collected " + mapa[pozicija] );
System.out.println("Jack currently has: " + currentCoinNumber);
/* } else {
if (map[position] != null && map[position] instanceof TrafficLight) {
//s.run();
System.out.println(player.getPlayer1() + " is at the " + map[position]);
} else {
if (map[position] == null ) {
s.interrupt();
wait(500);
position++;
}*/
}if (!RaceEnd){
System.out.println(player.getPlayer1() + " did not finish the race!");
}
}
}
}
}
问题是,当我们遍历地图时,如何访问getCoinValue并检索元素值并添加,这样当我们每次获取时,我们迭代到地图的末尾(Race)目前收集的硬币数量。 的即。期望的输出就像这样
杰克收集了硬币:75杰克目前拥有:75
杰克收集了硬币:18杰克目前拥有:93
杰克收集了硬币:38杰克目前拥有:131
杰克收集了硬币:95杰克目前拥有:226
杰克收集了硬币:25杰克目前拥有:251
杰克完成了比赛!
我试图这样做但它不起作用,它不允许我使用getCoinValue,它似乎是看不见的。
int currentCoinNumber += map[position].getCoinValue();
所以我需要添加两个对象(交通灯和硬币到我的地图,因此 map需要是一个Object数组,但如果map是一个Object数组(和 不是类型的硬币)我不知道如何访问getCoinValue(类 演员无效)
再提一次我定义了类,硬币和播放器。 玩家还有构造函数和getter以及setter。
Random r = new Random();
public int coinValue ;
public Coin(int val) {
val = r.nextInt(100);
this.coinValue = val;
}
@Override
public String toString() {
return "coins: " + coinValue;
}
public int getCoinValue(){
return coinValue;
}
public void setCoinValue(int coinValue){
this.coinValue = coinValue;
}}
答案 0 :(得分:1)
类型Object
没有方法getCoinValue
,因此如果您有一个Objects
数组,则无法调用该方法。
我不会解决使用Objects
数组的可疑决定,但如果你想这样做,那么它在技术上是完全有效的。要访问getCoinValue
,您需要将对象转换为Coin
。
假设Coin
位于数组索引9
。为了演员和调用getCoinValue
你可以这样做:
((Coin)map[9]).getCoinValue()
如果在一行上完成了强制转换和方法调用,则需要使用额外的括号来正确计算。
或者,这可以做同样的事情,但可能更具可读性:
Coin coin = (Coin)map[9];
答案 1 :(得分:0)
简单地将收集的当前硬币加起来。可能看起来像这样:
int currentCoinNumber = 0;
应该在for循环之前。
int currentCoinNumber = 0;
for (int position = 0; position < map.length; position++) {
if (position == 19) {
RaceEnd = true;
System.out.println(player.getPlayer1() + " finished the race!");
// s.interrupt();
break;
} else {
if (map[position] != null && map[position] instanceof Coin) {
currentCoinNumber+=map[position].getCoinValue();
System.out.println(player.getIgrac1() + " has collected " + mapa[pozicija]);
System.out.println("Jack currently has: " + currentCoinNumber);
} else {
if (mapa[pozicija] != null && mapa[pozicija] instanceof TrafficLight) {
// s.run();
System.out.println(player.getPlayer1() + " is at the " + mapa[pozicija]);
} else {
if (map[position] == null) {
s.interrupt();
wait(500);
position++;
}
}
if (!RaceEnd) {
System.out.println(player.getPlayer1() + " did not finish the race!");
}
}
}
}
这是你发布的一些代码修改过的代码。这仅适用于一个玩家