java main methode kann nicht kompiliert werden (Erstellen eines Objekts)

dannzu

Mitglied
Hallo alle zusammen,
ich bin relativ neu im Umgang mit java (1. Semester CSE) und habe folgendes Problem:

Wir sollen einen "Zug" zusammenbauen und der Compiler gibt mir folgenden Error:
12708

Meine Waggon und Train-Klasse:

Code:
package sheet08;



//a)
public class Waggon {
    private int SitzGesamt, SitzReserviert, SitzFrei ;
    private int Klasse;
    private String Doppelwagen;
    private int WCbesetzt, WCfrei , WCdefekt;
    private String WaggonHinten;
    

    


//b)
//Getter & Setter


public int getSitzGesamt() {
    return SitzGesamt;
}

public void setSitzGesamt(int sitzGesamt) {
    SitzGesamt = sitzGesamt;
}

public int getSitzReserviert() {
    return SitzReserviert;
}

public void setSitzReserviert(int sitzReserviert) {
    SitzReserviert = sitzReserviert;
}

public int getSitzFrei() {
    return SitzFrei;
}

public void setSitzFrei(int sitzFrei) {
    SitzFrei = sitzFrei;
}

public int getKlasse() {
    return Klasse;
}

public void setKlasse(int klasse) {
    Klasse = klasse;
}

public String getDoppelwagen() {
    return Doppelwagen;
}

public void setDoppelwagen(String doppelwagen) {
    Doppelwagen = doppelwagen;
}

public int getWCbesetzt() {
    return WCbesetzt;
}

public void setWCbesetzt(int wCbesetzt) {
    WCbesetzt = wCbesetzt;
}

public int getWCfrei() {
    return WCfrei;
}

public void setWCfrei(int wCfrei) {
    WCfrei = wCfrei;
}

public int getWCdefekt() {
    return WCdefekt;
}

public void setWCdefekt(int wCdefekt) {
    WCdefekt = wCdefekt;
}

public String getWaggonHinten() {
    return WaggonHinten;
}

public void setWaggonHinten(String waggonHinten) {
    WaggonHinten = waggonHinten;
}

//default Constructor
public Waggon() {
    
}
//Constructor
public Waggon(int sitzGesamt, int sitzReserviert, int sitzFrei, int klasse, String doppelwagen, int wCbesetzt,
        int wCfrei, int wCdefekt, String waggonHinten) {
    super();
    SitzGesamt = sitzGesamt;
    SitzReserviert = sitzReserviert;
    SitzFrei = sitzFrei;
    Klasse = klasse;
    Doppelwagen = doppelwagen;
    WCbesetzt = wCbesetzt;
    WCfrei = wCfrei;
    WCdefekt = wCdefekt;
    WaggonHinten = waggonHinten;
}

// e)
public String toString(){
    String strSitzGesamt = String.valueOf(SitzGesamt);
    String strSitzReserviert = String.valueOf(SitzReserviert);
    String strSitzFrei = String.valueOf(SitzFrei);
    String strKlasse = String.valueOf(Klasse);
    String strWCbesetzt = String.valueOf(WCbesetzt);
    String strWCfrei = String.valueOf(WCfrei);
    String strWCdefekt = String.valueOf(WCdefekt);
    
    return strSitzGesamt + "-" + strSitzReserviert + "-" + strSitzFrei + "-" + strKlasse + "-" + Doppelwagen + "-" + strWCbesetzt + "-" +
            strWCfrei + "-" + strWCdefekt + WaggonHinten;
    
}


}

Code:
package sheet08;

public class Train {

    int Baureihe;
    String Antriebsart;
    int PS;
    int Höchstgeschwindigkeit;
    int WaggonDahinter;
    
    
    
    
    //Getter&Setter
    public int getBaureihe() {
        return Baureihe;
    }
    public void setBaureihe(int baureihe) {
        Baureihe = baureihe; //this.baurihe = baureihe
    }
    public String getAntriebsart() {
        return Antriebsart;
    }
    public void setAntriebsart(String antriebsart) {
        Antriebsart = antriebsart;
    }
    public int getPS() {
        return PS;
    }
    public void setPS(int pS) {
        PS = pS;
    }
    public int getHöchstgeschwindigkeit() {
        return Höchstgeschwindigkeit;
    }
    public void setHöchstgeschwindigkeit(int höchstgeschwindigkeit) {
        Höchstgeschwindigkeit = höchstgeschwindigkeit;
    }

    
    public int getWaggonDahinter() {
        return WaggonDahinter;
    }
    public void setWaggonDahinter(int waggonDahinter) {
        WaggonDahinter = waggonDahinter;
    }

    
    //default Constructor
    public Train() {
    }
    
    
    //Constructor
    public Train(int baureihe, String antriebsart, int pS, int höchstgeschwindigkeit, int waggonDahinter) {
        super();
        Baureihe = baureihe;
        Antriebsart = antriebsart;
        PS = pS;
        Höchstgeschwindigkeit = höchstgeschwindigkeit;

    }
    
//e)
    
    public String toString(){
        String strBaureihe = String.valueOf(Baureihe);
        String strPS = String.valueOf(PS);
        String strHöchstgeschwindigkeit = String.valueOf(Höchstgeschwindigkeit);
        
        return strBaureihe + "-" + Antriebsart + "-" + strPS + "-" + strHöchstgeschwindigkeit;
    }

    

}

und im folgenden noch meine Main-Methode:

Code:
package sheet08;

import java.util.Random;

public class Test {
    
    public static void main( String[] args ) {
        Random WCkaputt = new Random();
        int WCdefekt = WCkaputt.nextInt(100)+1;
        System.out.println("Die Toilette ist zu " + WCdefekt + " % kaputt");
        
        Train t1 = new Train (412, "elektrisch", 13500, 250, 1);
        Waggon w1 = new Waggon(50, 24, 3, 1, "doppelstock", 0, 0, 0, "1 Waggon dahinter"); //keine Angabe über die WC-Anzahl
        Waggon w2 = new Waggon(100, 12, 64, 2, "doppelstock", 0, 0, 0, "1 Waggon dahinter");
        Waggon w3 = new Waggon(100, 32, 11, 2, "doppelstock", 0, 0, 0, "1 Waggon dahinter");
        Waggon w4 = new Waggon(50, 17, 3, 1, "doppelstock", 0, 0, 0, " kein Waggon dahinter");
        
        System.out.println(t1);
        System.out.println(w1);
        System.out.println(w2);
        System.out.println(w3);
        System.out.println(w4);
        
    //cannot find symbol Train & Waggon   
        //Variable als Train1 im typ train abspeichern
        
        

}
}

Ich habe noch einmal überprüft dass meine Klassen : Attribute eingegeben wurden, Getter & Setter haben und dass ich Konstruktoren habe.
Was ich allerdings komisch finde ist, dass ich die Main-Methode in der Eclipse Console angeguckt habe, und da alles funktioniert hat:
12709
Tipps und Anregungen wären hilfreich, da ich seit gestern den Fehler suche und langsam keine Ideen mehr habe!
Danke im Vorraus!!
 
Die Klassen sind ja in unterschiedlichen Dateien. Der Compiler schaut sich aber nur die Datei an, die Du gerade übersetzt.

Was Du jetzt machen kannst:
- Die Dateien alle zusammen übersetzen: javac Test.java Waggon.java Train.java
Dann kennt der Compiler auch die entsprechenden Klassen.
- Die Klassen in der richtigen Reihenfolge übersetzen (so dies möglich ist).
Also wenn Waggon z.B. weder Test noch Train nutzt, dann kannst Du ein javac Train.java machen
Dann kannst Du z.B. den Waggon übersetzen. Damit er aber den Train kennt (so er diesen braucht) musst Du ihm sagen, wo er die Klasse findet: -cp . -> javac -cp . Waggon.java
Ebenso dann auch javac -cp . Test.java

Üblich ist aber ersteres oder eben eine IDE nutzen, die das macht. Die IDE hat dann ein Projektmanagement und kümmert sich dann auch darum, dass alles übersetzt wird. So man keine IDE haben will, kann man aber auch ein Build Tool nutzen wie ant, maven oder gradle.
 
Wenn du javac aufrufst, solltest du nicht in einem konkreten Package sein, sondern im src-Ordner, in dem deine Packages und darin deine Java-Dateien liegen. Also nicht in `src/sheet08/` (was ein Package ist), sondern in `src/`. Dann kappts auch mit `javac sheet08/Test.java`.
Hint: Der javac Compiler sucht selbstständig nach den .java Dateien von referenzierten Klassen (und kompiliert diese selbstständig), auch wenn du sie nicht selbst auf der Kommandozeile angibst. Das klappt aber nur, wenn du in einem Source-Root bist und nicht innerhalb eines Packages.
 
Ich habe alles zusammen kompiliert und es hat keinen Error mehr ausgeben.
Danke für deine schnelle Rückmeldung!

Ich habe noch eine kurze Frage:
An sich hätte ich die beiden Klassen nicht importieren müssen, weil alles im gleichen package ist oder?
 
Ich habe noch eine kurze Frage:
An sich hätte ich die beiden Klassen nicht importieren müssen, weil alles im gleichen package ist oder?
Ja, wenn die Klassen im gleichen Package sind, musst Du diese nicht importieren.

Der Hinweis von httpdiggest ist aber noch wichtig - das hatte ich ganz übersehen:
Wenn du auch ein package hast (hier "sheet08"), dann übersetzt man nicht aus dem Verzeichnis der Dateien heraus, sondern man ist dann im "root".
Das Package gibt man dann bei der Datei mit an, also z.B. javac sheet08\Test.java sheet08\Train.java sheet08\Waggon.java

Da wird dann auch schnell deutlich: Sowas macht man in der Regel nicht mehr von Hand 🙂
 

Zurück
Oben