2017-06-05 3 views
-2

Ich bin neu in Java-Codierung, so leid für die Anfänger-Frage. Ich bin mir ziemlich sicher, dass ich etwas Einfaches übersehen habe, aber ich konnte in früheren Themen keine Lösung finden.Getter gibt immer 0

Ich versuche, ein Objekt "ComputerDraw" zu erstellen. Wenn ich ein neues "ComputerDraw" erstelle, möchte ich, dass der Computer entscheidet, ob er 1, 2 oder 3 Zahlen aus dem int-Array zieht. Die Zahlen werden zufällig herausgezogen.

Die Zahlen, die gezeichnet werden, sollten in der Variablen "computerSumCards" gespeichert werden.

Ich habe einen Getter erstellt, um ComputerSumCards zurückzugeben, aber es gibt jedes Mal "0" zurück.

Ich kann nicht herausfinden, warum das ist. Danke für die Hilfe!

public class computerDraw { 
    int computerSumCards; 
    int getAmountOfComputerCards; 
    int randomCard; 
    int draws = 0; 

    private int[] possibleDraws = {1, 2, 3}; 
    int computerCanDraw = (possibleDraws[new Random().nextInt(possibleDraws.length)]); 

    public void drawLoop() { 
      while (draws < computerCanDraw) { 
        int[] cards = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10}; 
        randomCard = (cards[new Random().nextInt(cards.length)]); 
        computerSumCards += randomCard; 

      } 
    } 

    public int getComputerSumCards() { 
      return computerSumCards; 
    } 

    public int getAmountOfComputerCards() { 
      getAmountOfComputerCards = draws; 
      return getAmountOfComputerCards; 
    } 
} 
+0

Haben Sie 'drawLoop()' aufgerufen? – Guy

+0

@Guy: Nein, habe ich nicht, aber ich habe eine Fehlermeldung erhalten und herausgefunden (in einem anderen Thema), dass ich while Schleifen in einem Klassenkörper nicht direkt setzen konnte. Ich versuche das immer noch herauszufinden. Ist es mit dieser Frage verbunden? Ich dachte, es gäbe ein anderes Problem. – BjornsBot

+0

Ich frage mich auch, warum diese Frage downvotes bekommt. Ich habe vorher recherchiert und versucht zu integrieren/neu zu kompilieren und auszuführen. Wenn ich etwas falsch mache, bitte erkläre es mir, damit ich es vermeiden kann, wenn ich zukünftige Fragen stelle. Vielen Dank. – BjornsBot

Antwort

1

Die Klasse "ignoriert" die while-Schleife nicht. Die Schleife befindet sich innerhalb der Methode drawLoop(). Wenn Sie es ausführen möchten, müssen Sie es explizit aufrufen

computerDraw draw = new computerDraw(); 
draw.drawLoop(); 

Als eine Nebenbemerkung, beginnen Klassennamen mit Kapital später. computerDraw sollte ComputerDraw sein.

+0

Aufruf der draw.drawLoop(); hat für mich gearbeitet, das habe ich vergessen! Vielen Dank! Danke auch für den Namenstipp - Anfängerfehler :-) – BjornsBot

2

Sie ändern sich nicht draws überall Wert, getAmountOfComputerCards = draws; Sie an dieser Stelle immer 0.

Nach computerSumCards += randomCard;draws++; hinzufügen zuweisen und es sollte in Ordnung sein. Ohne es erhalten Sie Endlosschleife.

+0

Danke für den Rat, das habe ich genau jetzt behoben. Das Problem ist jedoch, dass der Getter "getComputerSumCards()" 0 zurückgibt, während es nicht sollte. Irgendeine Idee, warum das passiert? – BjornsBot

+0

@BjornsBot Es funktioniert gut für mich, fügen Sie dem Code, was ich erwähnt habe, und rufen Sie zuerst 'drawLoop()' Methode und danach Getter. –

+0

danke löste es durch den Aufruf der DrawLoop() -Methode. – BjornsBot

0

Ich bin noch neu auch, aber versuchen Sie dies:

public int drawLoop() { 
     while (draws < computerCanDraw) { 
       int[] cards = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10}; 
       randomCard = (cards[new Random().nextInt(cards.length)]); 
       computerSumCards += randomCard; 

     } 
     return computerSumCards; 
} 

public int getComputerSumCards() { 
     return drawLoop(); 
} 
0

Sie rufen müssen draw.drawLoop(); Aber selbst wenn Sie Ihre while-Schleife aufrufen, wird in Endlosschleife geschaltet. Werte für Draws und ComputerCanDraw erhalten nie Änderungen und Draws bleibt immer < ComputerCanDraw Wert. Sie sollten entweder den Zeichenwert ändern oder den computerCanDraw korrekt implementieren.