2016-11-07 5 views
-2

Ich erstelle ein Java-Programm, das in Verbindung mit einer anderen Datei ausgeführt wird, um die so genannte objektorientierte Programmierung zu erstellen.Erstellen einer Java-Methode

Also habe ich das ganze Programm abgeschlossen, aber ich habe es schwer zu verstehen, wie man es kompilieren und ausführen. Ich weiß, dass mein Problem im Namen der Methode liegt. Jedoch verstehe ich nicht ruhig, wie man weiß, wie man die Methode nennt. Von dem was ich lese gibt es mehrere verschiedene Typen die man nennen kann.

(auch weiß, dass ich die Vertiefung verkorkst sieht, es ist direkt in meinem eigentlichen Programm)

Hier ist, was bei Suche Sinn meiner Frage zu helfen, machen:

import java.util.Scanner; 
import java.util.Random; 

    public class RockPaperScissors 
    { 
public static void main(String[] args) 
{ 
    class getUserChoice 
    { 
    System.out.println("Would you you like to play rock, paper scissors?"); 
    userChoice = in.nextLine(); 

    while (!userChoice.equalsIgnoreCase("Rock") && !userChoice.equalsIgnoreCase("Paper") && !userChoice.equalsIgnoreCase("Scissors")) 
    { 
     System.out.println("Invalid entry please try again"); 
     userChoice = in.nextLine(); 
    } 
    userChoice = userChoice.toUpperCase(); 
    return userChoice; 
    } //end of UserChoice 

    class getCPUChoice 
    { 
    computerRandom = r.nextInt(3)+1; 

    if (computerRandom == 1) cpuChoice = "Rock"; 
    else if (computerRandom == 2) cpuChoice = "Paper"; 
    else if (computerRandom == 3) cpuChoice = "Scissors"; 
    } 

    class pickWinner 
    { 
    //tie 
    if (userChoice.equals(cpuChoice)) 
    { 
     winner = tie; 
    } 

    //user has rock 
    if (userPlay.equals("rock")) 
    { 
     if (cpuChoice.equals("Scissor")) 
     { 
      winner = user; 
     } 

     else if (cpuChoice.equals("Paper")) 
     { 
      winner = Computer; 
     } 

     else if (cpuChoice.equals("Rock")) 
     { 
      winner = tie; 
     } 
     } 

     if (userPlay.equals("Paper")) 
     { 
     if (cpuChoice.equals("Scissor")) 
     { 
      winner = Computer; 
     } 

     else if (cpuChoice.equals("Paper") 
     { 
      winner = tie; 
     } 

     else if (cpuChoice.equals("Rock") 
     { 
      winner = user; 
     } 
     } 

     if (userPlay.equals("Scissors")) 
     { 
     if (cpuChoice.equals("Scissor")) 
     { 
      winner = tie; 
     } 

     else if (cpuChoice.equals("Paper") 
     { 
      winner = user; 
     } 

     else if (cpuChoice.equals("Rock") 
     { 
      winner = computer; 
     } 
     } 

    } 

} // Ende rockpaperscissors }

Mein Fehler ich erhalte, ist:

RockPaperScissors.java:10: error: expected System.out.println("Would you you like to play rock, paper scissors?");

Was von dem, was ich verstehe, ist von nicht richtig eingerichtet. Könnte jemand Ihnen vielleicht erklären, wie Sie wissen, wie Sie jede Methode richtig benennen?

Danke!

+3

Sie keine Klassen in Funktionen setzen können. – SLaks

+0

Also wäre mehr entlang der Linie der öffentlichen Statik? – TylerK

+0

Ihre offensichtlich bedeutete, die Klassen Methoden zu machen. Und wenn Sie das nicht getan haben, müssen Sie den Code in die inneren Klassen in Methoden einfügen. –

Antwort

0

Sie können nicht mehr als eine public Klasse in einer Datei deklarieren Um das Problem zu beheben, entfernen Sie das Wort public.

However I dont quiet understand how to know what to call the method.

Wie hierfür eine Methode aufrufen, einfach den Namen der Methode (vollständiges Beispiel meiner Antwort) verwenden:

public static void main(String[] args) { 
    class something{ 
     public void someMethod(int argument){ 
      //this doesn't do anything 
     }  
    } 
    something s = new something(); 
    s.someMethod(1); 

} 
+0

Ich denke, das Problem ist, dass sie nicht das grundlegende Verständnis der Klassenstruktur haben. Ich könnte mir vorstellen, dass die inneren/anonymen Klassen vorerst wahrscheinlich etwas über dem Kopf sind, wahrscheinlich wäre ein besserer Ansatz zu zeigen, wie dies als eine einzige Klasse mit Methoden gemacht wird. –

+0

Also, wenn ich so etwas wie nur Klasse tun wird es umgehen diesen Fehler, aber immer noch, dass I Identifier sollte erwartet werden. – TylerK

+0

Versucht, nur die Klassenmethode auszuführen, und es kompiliert immer noch nicht. Habe ich dann ein größeres Problem? Es gibt eine Menge Fehler zurück, Fehler, die bei früheren Programmen, die ich vorher gemacht habe, nicht existierten. Ich habe meinen Originalcode in meinem Beitrag aktualisiert, um zu zeigen, was ich habe. – TylerK

0

Dies gilt nicht, Java. Sie erstellen keine Klasse, um Entscheidungen zu treffen. mach es zu einer Methode.

public class RockPaperScissors { 

    private static final String [] choices = { "ROCK", "PAPER", "SCISSORS" }; 
    private Random random; 

    public RockPaperScissors() { this(null); } 

    public RockPaperScissors(Long seed) { 
     this.random = (seed == null) ? new Random() : new Random(seed.longValue()); 
    } 

    // An Enum would be better than a number or String 
    public String nextChoice() { 
     return choices[this.random.nextInt(choices.length)]; 
    } 
} 
0

Klassen und Methoden können innerhalb anderer Klassen definiert werden, aber weder kann innerhalb Methoden (Funktionen), mit Ausnahme von anonymen Funktionen definiert werden. Wenn dies ein eigenständiges Programm ist, das Sie schreiben wollten und das Sie für getUserChoice und getCPUChoice als Methoden verwenden möchten, entfernen Sie einfach das Schlüsselwort class vor beiden Namen und ersetzen Sie sie möglicherweise durch static, wenn Sie statische Methoden der Klasse RockPaperScissors möchten. Methoden müssen einen Rückgabetyp haben und in Ihrem Fall kann es String sein. Sie müssten immer noch eine Methode in Ihrer main Methode aufrufen.

0

Ich würde mir vorstellen, das ist die Art von Struktur, die Sie in einem "Standard" -Programm suchen. Sie können andere Klassen in anderen Dateien deklarieren und diese auch importieren. Ihr Code wird im Allgemeinen in Methoden innerhalb dieser Klassen laufen und wird von der Hauptmethode aufgerufen, die Ihr Einstiegspunkt ist.

//imports here 
public class ClassName { 
    public static void main(String[] args) { 
    //main entry point to your program 
    } 

    private String methodName(String param1) { 
    //do some stuff here 

    return someValue; 
    } 

} 
0

Sie können nicht mehrere Klassen in einer einzigen Datei erstellen. Daher sollte es hier nur ein "Klassen" -Schlüsselwort geben.

Ihre Methoden sind nicht gut formatiert, Sie einen Blick auf die Java Oracle Tutorial ergreifen sollte, um mit Java zu beginnen :)

Hier ist ein einfaches Beispiel für die Klasse + Methode:

public class MyClass{ 
    //Attribute 

    public int myMethod(int x) { 
     return x+1; 
    } 
} 

Verfahren ist definiert durch seine Sichtbarkeit (public), den zurückgegebenen Typ (int), seinen Namen (myMethod) und seine Parameter (int x). Also hier haben Ihre Methoden einen "Klasse" Typ zurückgegeben, was nicht möglich ist.

0

Es scheint, als ob Sie versuchen, ein Spiel zwischen einem Benutzer und einem Computer zu schreiben ... schön, aber weniger einfach als es klingt. Wie viele sagten, Sie haben Probleme, weil Sie Klassen mit einer falschen Sichtbarkeit und nicht genau am richtigen Ort erklären

Die Namen, die Sie gaben Ihre zwei Klassen gibt mir das Gefühl, sie sollten Methoden statt Klassen sein. So wäre es einfacher, zwei haben drei Methoden.

  • Die wichtigste Methode: das ist, wo Sie Ihr Spiel Schleife
  • A getUserChoice() ausgeführt wird: das ist, wo Sie den Benutzer zur Eingabe seiner Wahl (Gut, dass Sie den Benutzer sperren, bis er eine gültige Wahl eingibt) fragen
  • die getCPUChoice: Das ist, wo Sie die CPU in den Eingang seiner Wahl
  • fragen

Einige eine der Variablen, die Sie unbedingt nutzen werden zwischen mehr als einem Verfahren geteilt werden, so dass sie auch in der Klasse deklarieren, damit sie zugänglich sein können wo immer es nötig ist. Zum Beispiel:

Sie sollten Ihr Random-Objekt instanziieren und Ihre ComputerRandom-Variable deklarieren, bevor Sie sie verwenden.

Wie eine praktische Illustration habe ich eine Spielschleife (es gibt oft unendlich :)) in der Hauptmethode, wo ich die Benutzereingabe und die Computereingabe erhalten und dann dann vergleichen. Erfolg kommt mit einem Glückwunsch und Scheitern mit einem erneuten Versuch, beachten Sie. Ich gehe nicht davon aus, dass es genau dort ist, wo Sie hin wollten, aber es könnte sein.

Hier ist meine komplette Abbildung Code

import java.util.Scanner; 
import java.util.Random; 

/** 
* Created by alompo on 07.11.16. 
*/ 

public class RockPaperScissors { 

    static String userChoice = ""; 
    static String cpuChoice = ""; 
    static Scanner in = new Scanner(System.in); 
    static Random r = new Random(); 

    public static void main(String[] args) { 
     while(true) { 
      getUserChoice(); 
      getCPUChoice(); 
      if (cpuChoice.equalsIgnoreCase(userChoice)) { 
       System.out.println("Good choice, you have a match with the computer"); 
      } else { 
       System.out.println("Sorry mismatch between you and the computer...try again"); 
      } 
     } 

    } 

    public static void getUserChoice() 
    { 
     System.out.println("Would you you like to play rock, paper scissors?"); 
     userChoice = in.nextLine(); 

     while (!userChoice.equalsIgnoreCase("Rock") && !userChoice.equalsIgnoreCase("Paper") && !userChoice.equalsIgnoreCase("Scissors")) 
     { 
      System.out.println("Invalid entry please try again"); 
      userChoice = in.nextLine(); 
     } 
    } //end 

    public static void getCPUChoice() 
    { 
     int computerRandom = r.nextInt(3)+1; 

     if (computerRandom == 1) cpuChoice = "Rock"; 
     else if (computerRandom == 2) cpuChoice = "Paper"; 
     else if (computerRandom == 3) cpuChoice = "Scissors"; 
    } 
} 

enter image description here