OOP duplicate class, öffentliche Klasse in unterschiedlichen Java Dateien speichern?

kuzdu

Aktives Mitglied
Hallo Leute,
ich habe jetzt mit Javaprogrammierung (und auch das erste Mal OOP) angefangen und habe gleich mein erstes Problem. Deshalb bin ich hier (werde in Zukunft wohl öfter mal hier sein. 🙂 )

So jetzt zu meinem Problem:
Also ich lerne unter anderem aus dem Buch "Java von Kopf bis Fuß" und dort wird am Anfang ein Ratespiel erklärt. Die Funktion der einzelnen Elemente sind mir auch alle klar, allerdings kommen bei allen Klassen, die "public" sind folgender Fehler:
"class Ratespiel is public, should be declared in a file named Ratespiel.java"
"duplicate class: javaapplication2.SpielStarter"
Die Datei, wo das abgespeichert ist, heißt SpielStarter.java.

Iwie habe ich ihm Gefühl, dass das ein einfacher Verständnisfehler meinerseits ist, dass ich iwas umstellen muss, allerdings bin ich noch zu newbie dafür. 🙂 Also freue mich über jede Hilfe oder iwelche Googleschlagwörter.

Hier noch für alle interessierten der Code und die Ausgabe, die der Compiler ausgibt. Achja ich benutze Netbeans.

Java:
package javaapplication2;

public class Ratespiel {
Spieler s1;
Spieler s2;
Spieler s3;


public void starteSpiel() {
    
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 eins tippte " + tipp2);

tipp3 = s3.zahl;
System.out.println("Spieler eins 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("Ende");
        break;
        }
        else
        {
        System.out.println("Nochmal versuchen.");    
        }
    } //ende While-Schleife
}//Methodenende
} //Klassenende


public class SpielStarter {
    public static void main (String[] args) {
    
        Ratespiel spiel = new Ratespiel();
        spiel.starteSpiel();
    }

}
 
public class Spieler {
    
 int zahl = 0;   
 
 public void raten(){
     zahl = (int) (Math.random() * 10);
     System.out.println("Ich tippe auf die Zahl: " + zahl); 
}
}

Hier die Compilerausgabe:
java.lang.NoClassDefFoundError: javaapplication2/JavaApplication2
Caused by: java.lang.ClassNotFoundException: javaapplication2.JavaApplication2
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: javaapplication2.JavaApplication2. Program will exit.
Exception in thread "main" Java Result: 1

Gruß Kuzdu
 
Zuletzt bearbeitet:
In einer Datei darf es nur eine public class geben - dabei muss der Dateiname genauso lauten wie der Name dieser Klasse.
Entweder bei den anderen Klassen das public entfernen oder diese in eigene Dateien auslagern.

... und als Anfänger eventuell "klein" anfangen. Erstmal alles in einer Klasse, danach mal zwei Klassen wobei die eine Klasse die andere nutzt...
 
Hi, also hat funktioniert. Vielen Dank für die schnelle Antwort. Hatte zwar noch einen kleinen Programmfehler drin, aber den habe ich jetzt behoben.

Es ist ja nicht so, dass ich das erste Mal eine Programmiersprache anfange, ist nur die erste Mal Objektorientiert und mit Klassen und so. 🙂

Im Buch stehen tatsächlich drei public Klassen. Wie dem auch sei, nochmal danke danke.
 

Zurück
Oben