1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Java Programm mit mehreren Klassen

    • Frage
  • Sicka
  • 4. Februar 2004 um 17:16
  • Unerledigt
  • Sicka
    5
    Sicka
    Mitglied
    Punkte
    240
    Beiträge
    34
    • 4. Februar 2004 um 17:16
    • #1

    Ich möchte ein Javaprogramm mit 2 Klassen schreiben. Dabei muss ichjede Klasse als eigene Datei speichern, Dateiname = Klassenname, oder?
    Wenn ich die Klasse mit der Main Methode kompiliere, müsste ja auch die andere Klasse mitkompiliert werden, oder? Muss ich dazu nur die beiden Klassen im gleichen Verzeichnis speichern oder muss ich sonst noch irgendwie in der Klasse mit Mainmethode den Pfad angeben, wo de zweite Klasse liegt?

  • AntiBit
    13
    AntiBit
    Mitglied
    Reaktionen
    2
    Punkte
    1.712
    Beiträge
    297
    • 4. Februar 2004 um 17:32
    • #2

    Ja, 2 Dateien mit Dateiname = Klassenname.

    Wenn du die Klasse mit der main-Methode kompilierst wird die andere Klasse nicht automatisch mitkompiliert, es sei denn du verwendest eine IDE a' la Netbeans oder JBuilder.

    Sonst musst du beide Klassen "händisch" kompilieren.

    mfg

    Hätten uns Spiele wie Pac-Man in unserer Jugend beeinflusst, würden wir heute durch dunkle Räume irren, elektronische Musik hören und Pillen fressen.

  • marX
    7
    marX
    Mitglied
    Reaktionen
    10
    Punkte
    460
    Beiträge
    88
    • 4. Februar 2004 um 19:16
    • #3
    Zitat von AntiBit


    Ja, 2 Dateien mit Dateiname = Klassenname.

    also Dateiname=Klassenname hängt glaub ich vom Compiler ab,
    der JBuilder erwartet es aber so....

    -> normalerweise wirst du - wenn du ein projekt mit mehreren dateien machst - den projektmodus deiner IDE (=Oberfläche des Compilers) verwenden. dort musst du dann alles zu übersetzenden dateien angeben sowie die "main"-datei!

    mfg marX

  • Sicka
    5
    Sicka
    Mitglied
    Punkte
    240
    Beiträge
    34
    • 4. Februar 2004 um 19:52
    • #4

    Danke für die Antworten. Ich habe noch folgendes Problem: Wenn ich die Klasse Sum kompiliere, kommt eine Fehlermeldung, dass die Klasse LeseZahl nicht gefunden wird. Die Klasse LeseZahl lässt sich kompilieren. Wenn ich LeseZahl einfach als Methode in die Klasse Sum kopiere, funktioniert es auch.
    Die beiden Dateien liegen in einem Verzeichnis, wo sonst nix drinnen ist. Kann mir bitte wer sagen, wo der Fehler ist.

    Hier die 2 Klassen:


    import java.*;
    import java.io.*;

    public class Sum
    {
    public static void main (String args[]) throws java.io.IOException{

    int n=0;
    int zahl = LeseZahl.einlesen();

    System.out.println(zahl);
    }
    }


    import java.io.*;

    public class LeseZahl{

    static int einlesen() throws java.io.IOException{
    System.out.println("Zahl eingeben");
    BufferedReader din = new BufferedReader(new InputStreamReader(System.in));
    int x = Integer.parseInt(din.readLine());
    return(x);
    }

    }

  • AntiBit
    13
    AntiBit
    Mitglied
    Reaktionen
    2
    Punkte
    1.712
    Beiträge
    297
    • 4. Februar 2004 um 20:47
    • #5

    Deklarier die Methode static int einlesen() mal public

    Hätten uns Spiele wie Pac-Man in unserer Jugend beeinflusst, würden wir heute durch dunkle Räume irren, elektronische Musik hören und Pillen fressen.

  • Sicka
    5
    Sicka
    Mitglied
    Punkte
    240
    Beiträge
    34
    • 4. Februar 2004 um 21:31
    • #6
    Zitat von AntiBit

    Deklarier die Methode static int einlesen() mal public

    mm, das nützt leider auch nichts. Die genaue Fehlermeldung ist: Undefined variable or class name.

    Müsste prinzipiell die Klasse gefunden werden, wenn sie im gleichen Verzeichnis liegt?

  • AntiBit
    13
    AntiBit
    Mitglied
    Reaktionen
    2
    Punkte
    1.712
    Beiträge
    297
    • 4. Februar 2004 um 22:48
    • #7
    Zitat von Sicka

    mm, das nützt leider auch nichts. Die genaue Fehlermeldung ist: Undefined variable or class name.

    Müsste prinzipiell die Klasse gefunden werden, wenn sie im gleichen Verzeichnis liegt?

    Ja, prinzipiell schon. Ich hab's auch ausprobiert, funktioniert einwandfrei. Du müsstest die genaue Fehlermeldung ganz kopieren.

    Hätten uns Spiele wie Pac-Man in unserer Jugend beeinflusst, würden wir heute durch dunkle Räume irren, elektronische Musik hören und Pillen fressen.

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 5. Februar 2004 um 00:11
    • #8
    Zitat von Sicka

    Ich möchte ein Javaprogramm mit 2 Klassen schreiben. Dabei muss ichjede Klasse als eigene Datei speichern, Dateiname = Klassenname, oder?


    Das ist nicht ganz richtig:

    Es darf nur eine einzige Klasse mit dem Schlüsselwort 'public' pro datei vorhanden sein, und die muss dann genauso heissen wie die datei.

    Du darfst aber beliebig viele weitere Klassen definieren, die nicht public sind:

    Code
    /*datei: MeineApplikation.java*/
    
    
    package mein.package;
    
    
    class A{}
    class B{}
    class C{}
    
    
    public class MeineApplikation{
    
        A a = new A();
        B b = new B();
        C c = new C();
    
    
        public static void main(String[] args) {
            new MeineApplikation();
        }
    }
    Alles anzeigen

    lg, Benjamin Ferrari, bookworm.at

  • JohnFoo
    20
    JohnFoo
    Mitglied
    Reaktionen
    61
    Punkte
    4.231
    Beiträge
    761
    • 5. Februar 2004 um 02:37
    • #9
    Zitat von AntiBit

    Wenn du die Klasse mit der main-Methode kompilierst wird die andere Klasse nicht automatisch mitkompiliert, es sei denn du verwendest eine IDE a' la Netbeans oder JBuilder.

    Bei mir und Freunden unter Windows folgendes Phänomen:

    Beim Kompilieren über Command-Line werden alle Files übersetzt. Gibt's jedoch einen File schon, dann wird er's nicht. D.h. man kompliiert tatsächlich jeden File jedes mal einzeln oder man löscht immer die .class-Files, damit alles neu kompiliert wird. Blödes Verhalten.

  • JohnFoo
    20
    JohnFoo
    Mitglied
    Reaktionen
    61
    Punkte
    4.231
    Beiträge
    761
    • 5. Februar 2004 um 02:41
    • #10
    Zitat von a9bejo

    Es darf nur eine einzige Klasse mit dem Schlüsselwort 'public' pro datei vorhanden sein, und die muss dann genauso heissen wie die datei.

    Du darfst aber beliebig viele weitere Klassen definieren, die nicht public sind:

    Unter anderem auch aus diesem Grund ist es wohl am besten jeder Klasse eine eigene Datei zu gönnen.

  • Sicka
    5
    Sicka
    Mitglied
    Punkte
    240
    Beiträge
    34
    • 5. Februar 2004 um 10:25
    • #11
    Zitat von AntiBit

    Ja, prinzipiell schon. Ich hab's auch ausprobiert, funktioniert einwandfrei. Du müsstest die genaue Fehlermeldung ganz kopieren.

    Bei dir funktionieren die Klassen, so wie sie sind?
    so lautet die genaue Fehlermeldung beim kompilieren:

    Sum.java: In class `Sum':
    Sum.java: In method `Sum.main(java.lang.String[])':
    Sum.java:9: Undefined variable or class name: `LeseZahl'.
    ................int zahl = LeseZahl.einlesen();
    ..............................^
    1 error

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 5. Februar 2004 um 11:27
    • #12
    Zitat von Sicka

    Bei dir funktionieren die Klassen, so wie sie sind?
    so lautet die genaue Fehlermeldung beim kompilieren:

    Sum.java: In class `Sum':
    Sum.java: In method `Sum.main(java.lang.String[])':
    Sum.java:9: Undefined variable or class name: `LeseZahl'.
    ................int zahl = LeseZahl.einlesen();
    ..............................^
    1 error

    Alles anzeigen

    am code liegt das problem sicher nicht.Der ist (von der syntax her betrachtet) völlig korrekt.

    - compilierst du Sum.java auch sicher _nach_ LeseZahl.java?
    - hast du nicht vielleicht noch irgendwo eine 'package' anweisung in deiner klasse stehen?
    - Hast du vielleicht irgendwo bei den datei- oder klassennamen gross/kleinbuchstaben verwechselt?

    am besten nochmal Schritt für Schritt:

    Datei: 'Sum.java' :

    Code
    public class Sum {
    
    
        public static void main(String args[]) throws java.io.IOException {
    
    
            int n = 0;
            int zahl = LeseZahl.einlesen();
    
    
            System.out.println(zahl);
        }
    }
    Alles anzeigen

    Datei: 'LeseZahl.java' :

    Java
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    
    
    public class LeseZahl {
    
    
        public static int einlesen() throws java.io.IOException {
            System.out.println("Zahl eingeben");
            BufferedReader din =
                new BufferedReader(new InputStreamReader(System.in));
            int x = Integer.parseInt(din.readLine());
            return (x);
        }
    
    
    }
    Alles anzeigen

    in der shell:

    Code
    E:\documents\labs\workspace\test\src>javac LeseZahl.java Sum.java
    
    
    E:\documents\labs\workspace\test\src>java Sum
    Zahl eingeben
    2
    2

    lg, Benjamin Ferrari, bookworm.at

  • Sicka
    5
    Sicka
    Mitglied
    Punkte
    240
    Beiträge
    34
    • 5. Februar 2004 um 14:17
    • #13

    Jetzt funktioniert es endlich.

    Ich habe die ganze Zeit die Klassen getrennt kompiliert, d.h. zuerst:
    javac LeseZahl.java

    und dann:
    javac Sum.java

    Das funktioniert nicht. Wenn ich in einem Befehl beide Klassen schreibe:
    javac LeseZahl.java Sum.java
    funktioniert es. Das war mein Fehler.
    Danke für alle Antworten.

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 5. Februar 2004 um 16:35
    • #14
    Zitat von Sicka

    Jetzt funktioniert es endlich.

    Ich habe die ganze Zeit die Klassen getrennt kompiliert, d.h. zuerst:
    javac LeseZahl.java

    und dann:
    javac Sum.java

    Das funktioniert nicht. Wenn ich in einem Befehl beide Klassen schreibe:
    javac LeseZahl.java Sum.java
    funktioniert es. Das war mein Fehler.

    das ist seltsam! ob getrennt oder gemeinsam compiliert macht eigentlich keinen unterschied! Hauptsache bei 'javac Sum.java' findet der Compiler die 'LeseZahl.class' im classpath.
    :confused:

    lg, Benjamin Ferrari, bookworm.at

  • marX
    7
    marX
    Mitglied
    Reaktionen
    10
    Punkte
    460
    Beiträge
    88
    • 5. Februar 2004 um 18:43
    • #15
    Zitat von Sicka


    Kann mir bitte wer sagen, wo der Fehler ist.

    Hier die 2 Klassen:


    import java.*;
    import java.io.*;

    public class Sum
    {
    public static void main (String args[]) throws java.io.IOException{

    int n=0;
    int zahl = LeseZahl.einlesen();

    System.out.println(zahl);
    }
    }


    import java.io.*;

    public class LeseZahl{

    static int einlesen() throws java.io.IOException{
    System.out.println("Zahl eingeben");
    BufferedReader din = new BufferedReader(new InputStreamReader(System.in));
    int x = Integer.parseInt(din.readLine());
    return(x);
    }

    }

    Alles anzeigen

    Also versteh das jetzt bitte nicht falsch, aber dieser code sieht nicht danach aus, als ob du java programmieren könntest!!
    als erstes brauchst du mal einen konstruktor für die klassen!
    2. brauchst du keine "main" routine zu erstellen....
    3. würde ich schon aus gründen der übersichtlichkeit jede klasse in eine eigene datei stecken....

    schau dir doch einfach mal ein paar beispiele an....müsste es ja im web genügend geben :winking_face:

    mfg marX

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 5. Februar 2004 um 19:13
    • #16
    Zitat von marX

    Also versteh das jetzt bitte nicht falsch, aber dieser code sieht nicht danach aus, als ob du java programmieren könntest!!


    Nein, Es sieht so aus, als würde er es gerade lernen.
    Er will uns seinen code nicht verkaufen, er stellt fragen darüber.

    Zitat von marX


    als erstes brauchst du mal einen konstruktor für die klassen!


    jeder der beiden klassen in seinem code _hat_ bereits einen konstruktor.
    wenn er nur einen leeren kontruktor ohne parameter benötigt, wieso sollte er ihn dann extra anschreiben?

    Zitat von marX


    2. brauchst du keine "main" routine zu erstellen....


    Wenn er Sum.class als Applikation starten will (das ist hier offensichtlich der fall), dann braucht er auch die main-methode.

    Zitat von marX


    3. würde ich schon aus gründen der übersichtlichkeit jede klasse in eine eigene datei stecken....


    das tut er doch!


    Sicka macht offensichtlich gerade seine ersten Schritte als Programmierer. Wenn er gerade lernt, wie er java-source compiliert, muss er noch nichts über OOP design wissen ( Sicka: 'LeseZahl' ist keine gültige bezeichnung für eine klasse).

    lg, Benjamin Ferrari, bookworm.at

  • Maximilian Rupp 27. Dezember 2024 um 12:08

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung