Quellcode kann nicht kompiliert werden

marvx6

Mitglied
Hallo liebe Community,
bin ganz neu in Java und habe auch schon das erste Problem, an dem ich zurzeit festsitze.

Ich habe das Buch Java von Kopf bis Fuß - in diesem Buch tippte ich diesen code ab,
Java:
public class Ratespiel {
Spieler s1;
Spieler s2;
Spieler s3;



    public void starteSpiel() {
        s1 = new Spieler();
        s2 = new Spieler();
        s3 = new Spieler();

        int tipp1 = 0;
        int tipp2 = 0;
        int tipp3 = 0;

        boolean s1hatRecht = false;
        boolean s2hatRecht = false;
        boolean s3hatRecht = false;

        int zielZahl = (int) (Math.random() * 10);
        System.out.println("Ich denke mir eine Zahl zwischen 0 und 9 aus ...");

        while (true) {

            System.out.println("Die zu ratende Zahl ist" + zielZahl);

           s1.raten();
           s2.raten();
           s3.raten();

           tipp1 = s1.zahl;
           System.out.println("Spieler eins tippte" + tipp1);
           tipp2 = s2.zahl;
           System.out.println("Spieler zwei tippte" + tipp2);
           tipp3 = s3.zahl;
           System.out.println("Spieler drei tippte" + tipp3);

           if (tipp1 == zielZahl){
               s1hatRecht = true;
           }
                  if (tipp2 == zielZahl){
               s2hatRecht = true;
            }
                 if (tipp3 == zielZahl){
               s3hatRecht = true;
        }

          if (s1hatRecht || s2hatRecht || s3hatRecht){
              System.out.println("Wir haben einen Gewinner");
              System.out.println("Spieler eins hat richtig geraten? " + s1hatRecht);
              System.out.println("Spieler zwei hat richtig geraten? " + s2hatRecht);
              System.out.println("Spieler drei hat richtig geraten? " + s3hatRecht);
              System.out.println("Das Spiel ist aus.");
              break;

          } else {

               System.out.println("Die Spieler müssen es erneut versuchen.");



}


}

}
}

public class Spieler {
     int zahl = 0;


public void raten() {
    zahl = (int) (Math.random() *10);
    System.out.println("Ich tippe auf die Zahl: " + zahl);
}
}
public class SpielStarter {
    public static void main (String[] args) {
        Ratespiel spiel = new Ratespiel();
        spiel.starteSpiel();

    }
}
der sich aber einfach nicht kompilieren lässt.
Ich habe es mit der Konsole versucht und mit Netbeans

Konsole
Code:
marvin@marvin-VGN-FW54M:~/Dokumente$ javac SpielStarter.java
SpielStarter.java:9: class Ratespiel is public, should be declared in a file named Ratespiel.java
public class Ratespiel {
       ^
SpielStarter.java:82: class Spieler is public, should be declared in a file named Spieler.java
public class Spieler {
       ^
2 errors

Netbeans
Code:
[Exception in thread "main" java.lang.NoClassDefFoundError: ratespiel/SpielStarter
Caused by: java.lang.ClassNotFoundException: ratespiel.SpielStarter
        at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: ratespiel.SpielStarter. Program will exit.
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)/CODE]
marvin@marvin-VGN-FW54M:~/Dokumente$
Ich bekomme immer wieder diese Error-Meldung, weiß aber nicht was ich ändern soll und falschen Code dürfen die ja auch nicht in ein Buch reinschreiben 😀 ?!


Hoffe ihr könnt mir helfen
Mfg Marvx6
 
Sollte das nicht der Compiler tun ?
Wenn ich in der Konsole
Code:
javac SpielStarter.java
eingebe, erstellt der doch eigentlich dann die Klassen aus der Datei heraus und die JVM sollte sie dann ausführen ?

Im Buch wird auch nicht explizit darauf hingewiesen ?
 
Okay danke hab jetzt alles in 3 verschiedenen Dateien mal untergebracht und den Spielstarter über die Konsole nachdem kompilieren ausgeführt - läuft prima
Vielen Dank 😉

Mfg Marvx6
 
Na ja, steht ja auch schon in der Fehlermeldung:
Code:
class Spieler is public, should be declared in a file named Spieler
Du kannst halt schon weitere Klassen in die eine Datei reinschreiben, aber es darf nur eine public sein, soweit ich weiss. Bei kleinen Progrämmchen kann das evtl. sinnvoll sein, bei grösseren Projekten wird das schnell unübersichtlich.
 
Du musst für jede Klasse eine eigene .java Datei erstellen, die den gleichen Namen wie die darin enthaltene Klasse haben muss. Compilieren musst du nur die Klasse mit der main-Methode alle anderen benötigten Klassen compiert der Compiler dann von alleine.
 
Innere Klassen werden nur selten verwendet (Ausnahme anonyme Klassen). Als Anfaenger wuerd ich auf innere Klassen verzichten und pro Klasse ein eigenes File erstellen.
 

Zurück
Oben