2017-05-26 4 views
1

Ich erstelle ein Würfelspiel mit verschiedenen Methoden. Ich kann jedoch nicht herausfinden, wie Variablen zwischen meinen Methoden zur Verwendung in der anderen Methode übergeben werden. Es beginnt mit einem Menü, in dem der Benutzer entweder 1 für ungerade oder 2 für "select" auswählt, dann zur Roll-Methode geht, um die Summe der Roll zu erhalten, und dann die Berechnungsmethode, um dem Benutzer zu sagen, ob er einen oder einen Verlust hat. Allerdings kann ich nicht herausfinden, wie man diceSum übergibt und zwischen meinen Methoden für die Berechnungsmethode auswähle.Fehler beim Übergeben von Variablen zwischen Methoden

Ich kann nicht herausfinden, wie man wählen und diceSum in diceCalc() verwendet werden, um die Antwort für den Benutzer auszudrucken.

private static void guess(){ 
    Scanner input = new Scanner(System.in); 
    System.out.print("(1) Odd\n" 
      +"(2) Even\n" 
      +"(3) Quit Game\n" 
      +"What is your selection: "); 
    try { 
     int select = input.nextInt(); 
     if(select == 1) { 
      System.out.println(""); 
      diceRoll(); 
     } else if(select == 2) { 
      System.out.println(""); 
      diceRoll(); 
     } else if(select == 3) { 
      System.out.println("Thank you for playing Dueling Dice v1.0..."); 
    system.out(0); 
} 

private static void diceRoll() { 
    int roll1, roll2, diceSum; 
    roll1 = (int)(Math.random()*6+1); 
    roll2 = (int)(Math.random()*6+1); 
    diceSum = roll1 + roll2; 

    System.out.println(" Dice 1 roll = " + roll1); 
    System.out.println(" Dice 2 roll = " + roll2); 
    System.out.println("TOTAL dice roll = " + diceSum); 
    diceCalc(); // this is called in the main after the guess since guess performs the roll 
} 

private static void diceCalc() { 
    if (diceSum % 2 != 0 && select == 1 || diceSum % 2 == 0 && select == 2) { 
     if (select == 1) { 
      System.out.println("Dice rolled = " + diceSum + "and you selected odd"); 
     } else { 
      System.out.println("Dice rolled = " + diceSum + "and you selected even"); 
     } 
     System.out.println("CONGRATULATIONS! You WIN!!"); 
     won++; 
     played++; 
    }else if (diceSum % 2 == 0 && select == 1 || diceSum % 2 != 0 && select == 2){ 
     if (select == 1) { 
      System.out.println("Dice rolled = " + diceSum + "and you selected odd"); 
     } else { 
      System.out.println("Dice rolled = " + diceSum + "and you selected even"); 
     } 
     System.out.println("I am sorry you lost!"); 
     lost++; 
     played++; 
    } 
    System.out.print("it is making it here!"); 
+0

Wie drucken Sie einen bestimmten String? Sie übergeben es als Argument der println() -Methode, oder? Also, wie denkst du dicechCalc sollte Zugang zu diceSum haben? Sollte es nicht als Argument gelten, damit diceRoll(), das diceCalc() aufruft, es als Argument übergeben kann? –

+0

Haben Sie das Problem gelöst? – luizfzs

Antwort

1

Sie können diceSum an die diceCalc-Methode übergeben.

diceCalc(diceSum); // this is called in the main after the guess since guess performs the roll 

Dann fügen Sie die Parameter zur Funktion diceCalc hinzu.

private static void diceCalc(int diceSum) 
0

Sie könnten einige Funktionen und Parameter in Java lesen. .

davon Trotz, können Sie wie folgt tun:

Pass select Parameter

private static void guess(){ 
    int select = <someValue> 
    ... 
    diceRoll(select); 
    ... 
} 

Auf der diceRoll Methode diceRoll Methode deklarieren Sie die Parameter wie unten.

private static void diceRoll(int varSelect) { 
    ... 
    System.out.println("Select value: " + varSelect); 
    ... 
} 

Edit 1: Nur daran denken, dass primitive Typen in Java von Wert übergeben werden, was bedeutet, dass, wenn Sie den Wert varSelect innerhalb diceRoll ändern, wird es nicht den Wert von select über den Umfang aktualisieren von die guess Methode. Sehen Sie sich diese Frage: Is Java “pass-by-reference” or “pass-by-value”?

0

Hier ist Beispiel:

void methodA(){ 
int toB = 5; 
methodB(toB); 
} 
void methodB(int fromA){ 
int recievedFromA = fromA; 
System.out.println(recievedFromA); 
} 

Ein Buch oder Kurs verwenden Sie? Ich frage mich, ob Sie ein Konsolenspiel schreiben, bevor Sie die grundlegenden Konzepte der Programmierung lernen. Wenn du dich selbst lehrst, dann empfehle ich dir, ein gutes Java-Buch wie Effektives Java von Joshua Bloch zu finden, um dir bei den meisten grundlegenden und fortgeschrittenen Konzepten zu helfen, die du lernen musst.

0

In den Methoden deklarierte Variablen (zum Beispiel diceSum) sind nur lokal für diese spezifische Methode. Andere Methoden können nicht auf sie zugreifen.

public static void main(String[] args) { 
    int diceSum; // Can only be used in this method 
} 

public static void diceCalc() { 
    // The variable diceSum is not visible here, it can only be accessed 
    // by the main() method 
} 

Sie können jedoch Parameter an Methoden übergeben. Sie setzen sie nur zwischen den Klammern:

public static void main(String[] args) { 
    int diceSum = 3; 
    diceCalc(diceSum); 
} 

public static void diceCalc(int diceSum) { 
    // diceSum will contain the value 3 
    ... 
} 

Es ist eine gute Sache, um die Dinge dynamischer zu machen. Zum Beispiel hängt das diceCalc()-Verfahren von der Menüelementnummer ab, ob es ungerade oder gerade ist. Wenn Sie die Menüelemente ändern möchten (oder eine grafische Benutzeroberfläche erstellen, bei der der Benutzer auf eine Schaltfläche klickt, um zwischen "Ungerade" oder "Gerade" zu wählen), müssen Sie auch die Methode diceCalc() ändern.

0

Vielen Dank für die Hilfe, aber herausgefunden. Ich wusste, dass ich meine Methode zu einem int ändern musste, um ein Argument zurückzugeben, und es funktionierte perfekt.

private static int diceRoll() { 
    int roll1, roll2, diceSum; 
    roll1 = (int)(Math.random()*6+1); 
    roll2 = (int)(Math.random()*6+1); 
    diceSum = roll1 + roll2; 

    System.out.println(" Dice 1 roll = " + roll1); 
    System.out.println(" Dice 2 roll = " + roll2); 
    System.out.println("TOTAL dice roll = " + diceSum); 
    return diceSum; 

} 

private static void diceCalc() { 
    if (diceSum % 2 != 0 && select == 1 || diceSum % 2 == 0 && select == 2) { 
     if (select == 1) { 
      System.out.println("\nDice rolled = " + diceSum + " and you selected odd"); 
     } else { 
      System.out.println("\nDice rolled = " + diceSum + " and you selected even"); 
     } 
     System.out.println("CONGRATULATIONS! You WIN!!"); 
     won++; 
     played++; 
    }else if (diceSum % 2 == 0 && select == 1 || diceSum % 2 != 0 && select == 2){ 
     if (select == 1) { 
      System.out.println("Dice rolled = " + diceSum + "and you selected odd"); 
     } else { 
      System.out.println("Dice rolled = " + diceSum + "and you selected even"); 
     } 
     System.out.println("I am sorry you lost!"); 
     lost++; 
     played++; 
    } 
} 
0

Es ist besser, in Ihrem Fall Klasse zu erklären Dice dann Ihre Methoden als Mitglieder Dice definiert

auch definieren select und diceSum als Membervariablen der Klasse Dice

Danach wird es einfach sein wird, Greifen Sie auf diese Variablen innerhalb eines Members der Klasse zu. Würfel

Auf diese Weise wird Ihr Programm besser organisiert und leichter zu lesen.

public class Dice { 

    private int select; 
    private int diceSum; 

    private void guess(){ 
    Scanner input = new Scanner(System.in); 
    System.out.print("(1) Odd\n" 
      +"(2) Even\n" 
      +"(3) Quit Game\n" 
      +"What is your selection: "); 

     select = input.nextInt(); 
     if(select == 1) { 
      System.out.println(""); 
      diceRoll(); 
     } else if(select == 2) { 
      System.out.println(""); 
      diceRoll(); 
     } else if(select == 3) { 
      System.out.println("Thank you for playing Dueling Dice v1.0..."); 
     } 
    } 
    private void diceRoll() { 
    int roll1, roll2; 
    roll1 = (int)(Math.random()*6+1); 
    roll2 = (int)(Math.random()*6+1); 
    diceSum = roll1 + roll2; 

    System.out.println(" Dice 1 roll = " + roll1); 
    System.out.println(" Dice 2 roll = " + roll2); 
    System.out.println("TOTAL dice roll = " + diceSum); 
    diceCalc(); // this is called in the main after the guess since guess performs the roll 
    } 

    private void diceCalc() { 
    if (diceSum % 2 != 0 && select == 1 || diceSum % 2 == 0 && select == 2) { 
     if (select == 1) { 
      System.out.println("Dice rolled = " + diceSum + "and you selected odd"); 
     } else { 
      System.out.println("Dice rolled = " + diceSum + "and you selected even"); 
     } 
     System.out.println("CONGRATULATIONS! You WIN!!"); 
     won++; 
     played++; 
    }else if (diceSum % 2 == 0 && select == 1 || diceSum % 2 != 0 && select == 2){ 
     if (select == 1) { 
      System.out.println("Dice rolled = " + diceSum + "and you selected odd"); 
     } else { 
      System.out.println("Dice rolled = " + diceSum + "and you selected even"); 
     } 
     System.out.println("I am sorry you lost!"); 
     lost++; 
     played++; 
    } 
    System.out.print("it is making it here!"); 
    } 
} 
Verwandte Themen