迭代数组,检索元素值并添加它们

时间:2017-01-31 13:04:59

标签: java arrays

我定义了一个名为" 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;
}}

2 个答案:

答案 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!");
                    }
                }

            }
        }

这是你发布的一些代码修改过的代码。这仅适用于一个玩家