2017-01-31 3 views
1

Als ich ein Objekt-Array namens "map" und reservierten Platz für 20 Elemente, in der Klasse "Coin" definiert habe, habe ich einen Konstruktor erstellt, der jeder Münze einen zufälligen coinValue zuweist und lege es in die Array-Map. Ich habe auch einen class player mit coustructor und getters/setters auf Player 1 und Player 2 eingestellt. Klasse TrafficLight ist ein Thread, aber das ist nicht von großer Bedeutung für meine Frage, also habe ich es im Code, um Verwirrung zu vermeiden. Dann habe ich vier Coin-Objekte erstellt und sie bestimmten Indexen in meinem "map" -Array zugewiesen. Jetzt muss ich Ampel und Coin Objekte erstellen und sie in die Objekt [] Karte einfügen. Nun wird der Code unten gezeigt:Durch ein Array Iterieren, Elementwerte abrufen und hinzufügen

UPDATE:Ich weiß noch nicht, wie getCoinValue zugreifen, wenn beide Münzen und Traffic im Array vom Typ Object sind.

UPDATE:ich dies ausdrücklich festgelegt, indem die Münze Objekt wie folgt Gießen:

Coin coin= (Coin)map[position]; 

       currentCoinValue += coin.getCoinValue(); 

Der Rest des Codes ...

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

      } 

     } 
} 

Frage ist, wie getCoinValue zu dem acces und ein Element Wert abrufen und es hinzufügen, wie wir durch die Karte laufen, so dass wir gegen Ende der Karte (Rennen) jedes Mal, wenn wir eine aktuelle Nummer erhalten iterieren von Münzen gesammelt. dh gewünschter Ausgang wie diese

Jack gesammelt Münzen zu sein: 75 Jack hat zur Zeit: 75

Jack gesammelter Münzen hat: 18 Jack hat zur Zeit: 93

Jack gesammelter Münzen hat: 38 Jack hat zur Zeit: 131

Jack sammelte Münzen: 95 Jack hat zurzeit: 226

Jack gesammelt Münzen hat: 25 Jack hat zurzeit: 251

Jack beendete das Rennen!

Ich habe versucht, dies zu tun, und es funktioniert nicht, es erlaubt mir nicht, CoinValue zu bekommen, es scheint unsichtbar.

int currentCoinNumber += map[position].getCoinValue(); 

Also muß ich beiden Objekte hinzufügen (Ampel und Münzen auf meine Karte, so Karte muss ein Object-Array sein, aber wenn die Karte ist ein Object-Array (und nicht vom Typ Münze) ich weiß nicht, wie die getCoinValue (Klasse Guss funktionierte nicht zuzugreifen)

ein I-Klassen haben mehr Zeit zu erwähnen definiert, Coin und Spieler. Spieler auch Konstruktor und Getter und Setter hat.

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; 
}} 

Antwort

0

einfach addieren Sie die aktuellen Münzen mit den gesammelten. wie folgt aussehen könnte:

int currentCoinNumber = 0; vor der for-Schleife sein sollte.

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

      } 
     } 

Dies ist der Code, den Sie ein bisschen geändert veröffentlicht. Dies funktioniert nur für 1 Spieler gleichzeitig

+0

Ich habe versucht, es so, aber es erlaubt mir nicht, überhaupt getCoinValue, ich weiß wirklich nicht, warum, das ist warum ich mich entschieden habe, es hier zu veröffentlichen. –

+0

Was ist der Fehler, wenn Sie 'getCoinValue' aufrufen möchten? – XtremeBaumer

+0

Es ist kein Fehler, es ist nur undefiniert für den Typ Objekt. –

1

Der Typ Object hat keine Methode getCoinValue, wenn Sie also ein Array von Objects haben, können Sie diese Methode nicht aufrufen.

Ich werde nicht die fragwürdige Entscheidung, ein Array von Objects zu verwenden, aber wenn Sie dies tun möchten, ist es technisch einwandfrei gültig. Um auf zuzugreifen, müssen Sie das Objekt in eine Coin umwandeln.

Sprich ein Coin an Array-Index 9 ist. Um zu werfen und rufen getCoinValue Sie es auf diese Weise tun können:

((Coin)map[9]).getCoinValue() 

zusätzliche Klammern erforderlich sind für die Besetzung korrekt zu bewerten, ob die Besetzung und Methodenaufruf in einer Zeile fertig ist.

Alternativ dies macht das Gleiche, aber vielleicht besser lesbar sein:

Coin coin = (Coin)map[9]; 
+0

Ich habe Object als Array-Typ verwendet, weil ich zwei verschiedene Objekte darin einfügen muss (Ampel und Münze). Stellen Sie sich meine Array-Karte als eine zufällige Anordnung von austauschbaren Münzen und Ampeln vor, wo der Spieler, während er durch die Karte iteriert, entweder eine Münze sammeln oder an der Ampel anhalten kann (implementiert als ein Thread). Und Danke für die Hilfe, Wenn ich meine Besetzung zum ersten Mal versucht, so: currentCoinNumber + = (Münze) map [Position] .getCoinValue(); hat es nicht funktioniert, so dass es mich wirklich verwirrt. –

+0

Ja, ich verstehe. Es gibt immer noch Möglichkeiten, die Verwendung von "Objekt" zu vermeiden. In diesem Fall würde das Befehlsmuster die Verwendung von Objekten vermeiden. –

Verwandte Themen