2016-07-26 20 views
-2

Vor diesem Hintergrund:Des Versuch, einen Satz von Variablen aus Zeichenfolge zuzugreifen (JAVA)

System.out.println("Make a choice : (1), (2), (3)"); 
//validation is a scanner already declare elsewhere 
n = validation.nextLine();   
switch (n) { 
    case "1": 
     play(1); 
     break; 
    case "2": 
     play(2); 
     break; 
    case "3": 
     play(3); 
     break; 
    default: 
     System.out.println("invalid"); 

/?? means I don't know 
public static void play(1??){ 
System.out.print("Did you win? ((y)es or (n)o) "); 
choice = validation.nextLine(); 
// if yes ?? ++win1 
// if no ?? ++loose1 
// I know how to do those loops, I don't know how to make the variable choice fit the current case (++win2 and ++loose2 ans the case 2: for example) 
} 

Mein Problem, für alle Fälle gibt es eine Reihe von spezifischen Variablen, die erhöht werden muss (zB casevar1, win1, loose1, etc.), wenn der Fall 2 ausgewählt ist, möchte ich, dass die Variablen in der play() Methode jetzt automatisch auf die richtigen Variablen beziehen (Beispiel casevar2, win2, loose2, etc.). Also, wie gebe ich diese Informationen an die play() Methode?

+2

Vielleicht die Parameter in eine eigene Klasse einpacken und einige Objekte dieser Klasse in ein Array einfügen? –

+1

Für den einfachsten Weg, da Sie 1,2,3 in Play-Methode übergeben, könnten Sie einfach überprüfen, welcher Parameter empfangen wird und basierend darauf die Menge der geeigneten Variablen verwenden. Nicht die besten eingerichteten Möglichkeiten, aber dies würde die Anforderung erfüllen. –

+0

David Wallace: irgendwelche Links, die mir dabei helfen könnten? Kein Experte, ich weiß nicht, wie man Klassen und Arrays erstellt und manipuliert ... ich bin neu in der Programmierung. Ich weiß, dass ich diese Dinge wissen muss, ich hatte nur eine kleine Erfahrung in Visual Basic, was bedeutet, dass ich nichts weiß ... :(Was würden Sie als Ressource vorschlagen? –

Antwort

0

Ich bin nicht sicher, ob ich Ihre Frage verstehen. Ich denke, ein Teil davon ist, wie Parameter an eine Methode übergeben werden. Bitte folgen Sie den Code und Kommentare:

//I used 3 integers just for demonstration purpose 
    int casevar1, win1, loose1,casevar2, win2, loose2; 
    public static void main(String[]arghs){ 

     System.out.println("Make a choice : (1), (2), (3)"); 
     //validation is a scanner already declare elsewhere 
     n = validation.nextLine(); 

     switch (n) { 
      case "1": 
       //assign values 
       casevar1 =7; win1 =9; loose1 =0; 
       play(casevar1, win1, loose1); //pass appropriate variables to play method 
       break; 
      case "2": 
       //assign values 
       casevar2 =17; win2 =8; loose2 = 4; 
       play(casevar2, win2, loose2); //pass appropriate variables to play method 
       break; 
      case "3": 
       //do like case "1"/case "2" 
       break; 
      default: 
       System.out.println("invalid"); 
     }//end of switch 
    } 

    //an example of a play method recieving 3 integers. 
    public static void play(int casevar, int win, int loose){ 

     System.out.print("Did you win? ((y)es or (n)o) "); 
     choice = validation.nextLine(); 
     //follow Aku Nour's answer 
    } 

EDITED: ein Beispiel zu beantworten Ihre Frage wurde hinzugefügt. Erstellen Sie ein Objekt die Daten Verziehen, wie @ David Wallace vorgeschlagen:

public class Test { 

    public static void main(String[]arghs){ 

     public static void main(String[]arghs){ 

      System.out.println("Make a choice : (1), (2), (3)"); 
      //validation is a scanner already declare elsewhere 
      n = validation.nextLine(); 

      switch (n) { 
      case "1": 
       //set an object initialized to casevar =7, win =9, loose = 0 
       play(new DataObject(7,9, 0)); 
       break; 
      case "2": 
       play(new DataObject(17,8, 4)); 
       break; 
      case "3": 
       //do like case "1"/case "2" 
       break; 
      default: 
       System.out.println("invalid"); 
      }//end of switch 
     } 

     //an example of a play method recieving 3 integers. 
     public static void play(){ 

      System.out.print("Did you win? ((y)es or (n)o) "); 
      choice = validation.nextLine(); 
      //follow Aku Nour's answer 
     } 
    } 


    //play method receiving data object 
    public static void play(DataObject data){ 

     System.out.print("Did you win? ((y)es or (n)o) "); 
     choice = validation.nextLine(); 

     // 
     casevar++; 
    } 

    //as David Wallace proposed 
    //an object containing the 3 parameters you mentioned 
    class DataObject { 


     private int casevar; private int win; private int loose; 

     DataObject(int casevar, int win, int loose){ 

      this.casevar = casevar; 
      this.win = win; 
      this.loose = loose; 
     } 

     public int getCasevar() { 
      return casevar; 
     } 

     public void setCasevar(int casevar) { 
      this.casevar = casevar; 
     } 

     public int getWin() { 
      return win; 
     } 

     public void setWin(int win) { 
      this.win = win; 
     } 

     public int getLoose() { 
      return loose; 
     } 

     public void setLoose(int loose) { 
      this.loose = loose; 
     } 
    } 

} 

Wenn es nicht klar genug beantwortet oder nicht zögern Sie sich nicht zu fragen.

+0

Was ist in Ihrem ersten Beispiel ist näher, was ich tun möchte ... aber zum Beispiel, wenn ich das in der Play-Funktion möchte, könnte ich etwas tun: ++ casevar und dass dies würde die richtige casevar1 inkrementieren oder casevar2 oder casevar3 je nach Szenario, wie mache ich das? Weil auf diese Weise der Wert der Variablen weitergegeben wird, aber es scheint nur ein Weg zu sein ... verstehst du, was ich meine? Sorry, wenn ich nicht klar genug bin, es ist mein erstes Mal hier, ich werde versuchen, mich beim nächsten Mal besser auszudrücken, danke! –

+0

Zum Beispiel in Ihrem Beispiel, wenn der Fall 1 ausgewählt ist und ich mache ++ casevar in der Play-Methode, wäre das Ergebnis casevar1 = 8, das ist richtig, aber wenn ich den Fall 1 wieder wähle, das Ergebnis ist immer noch 8, wo es 9 sein soll. Hoffe, es ist klarer so. –

+0

In diesem Fall können Sie ein Objekt kisten, das die Daten enthält, wie @ David Wallace vorgeschlagen hat. Ich habe ein Beispiel hinzugefügt. – c0der

1

Sie könnten somthing wie diese

public static void play(String s){ 

    System.out.print("Did you win? ((y)es or (n)o) "); 
    choice = validation.nextLine(); 

    if("1".equals(s)) { 
     if("y".equals(choice)) { 
      win1 ++; 
     } else if ("n".equals(choice)) { 
      loose1 ++; 
     } 
    } 

    if("2".equals(s)) { 
     if("y".equals(choice)) { 
      win2 ++; 
     } else if ("n".equals(choice)) { 
      loose2 ++; 
     } 
    } 
} 
+0

Ho, ich verstehe Sie, es ist interessant, ich werde etwas von diesem Typ versuchen und ich werde zu Ihnen zurückkommen Aber ich hatte gehofft, dass ich in der Lage wäre, das in einer Charge zu machen, wenn Sie verstehen, was ich meine. Wenn ich eine einzige Schleife machen könnte, die die 3 Fälle behandeln würde ... (es ist meine zweite Woche von JAVA, also hilft alles irgendwie, also vielen Dank!) –

1

Ok, mit Inspiration von euch, ich habe meine Frage beantwortet. Ich habe es auf diese Weise:

in der Hauptsache, etwas wie die

case "1": 
    play(1, nbEasy, easyPos, easyNeg); 
    break; 
case "2": 
    play(2, nbInter, interPos, interNeg); 
    break; 
case "3": 
    //same thing with hard 

und in der Methode play(), so etwas wie die:

public static void play(int niv, int nbGames, int nbPos, int nbNeg){ 
    ++nbGames; 
    System.out.print("Completed? ((y)yes or (n)o) "); 
    choice = validation.nextLine(); 
    if (choice.equals("y")){ 
     ++nbPos;  
    } 
    else if (choice.equals("n")) 
     ++nbNeg; 

    switch (niv){ 
     case 1: 
      nbEasy=nbGames; easyPos=nbPos; easyNeg=nbNeg; 
     case 2: 
      nbInter=nbGames; interPos=nbPos; interNeg=nbNeg; 
     case 3: 
      //same thing with hard 
    } 
} 

Es ist perfekt für mich, weil ich kann im ersten Abschnitt der play() -Methode eine Menge Zeilen hinzufügen, die mit dem funktionieren, was mit dem Schalter im Haupt- und am Ende übergeben wurde, ich beeinflusse die neuen Werte auf die richtigen Variablen.

Ich möchte Ihnen allen danken, ich bin neu in der Programmierung und neu in dieser Gemeinschaft, aber für eine Menge Orte ausprobiert, sieht dieser Ort bei weitem die beste. Du bist reaktionsfreudig, höflich, herzlich, und ich werde alle Regeln lesen, um diesem Ort besser zu entsprechen, mehr meine Fragen vorzubereiten und wenn ich dazu in der Lage bin, werde ich anderen helfen. Dieser Ort ist unglaublich, ich liebe euch Leute.

+0

Vielen Dank für Ihr Feedback. Ich stimme zu, um Sie zu ermutigen, zu fragen, zu helfen und Hilfe zu bekommen. – c0der