Hilfe um Main Methode zu erstellen

Hallo zusammen
Nun ja ich bin ein blutiger Anfänger in Sachen Java und arbeite mich mit dem Buch Java lernen mit BlueJ an das Thema. Nun möchte ich aber nicht die BlueJ Oberfläche benützen sondern meine Java-Programme in einem einfachen Editor zu erstellen. Da ich dadurch mehr Übung erhalte um Fehler zu finden.

Leider bringe ich es jedoch nicht mal fertig dieses Programm-Listing zum laufen zu bringen, da ich keine main-methode habe. Leider habe ich es aber nicht geschafft eine Main-methode dafür zu schreiben. Kann mir jemand sagen wie und wo die Main-Methode hier hinsollte und auf welche methode sie verweisen sollte:

/**
* Die Klasse Ticketautomat modelliert einfache Ticketautomaten,
* die Tickets zu einem Einheitspreis herausgeben.
* Der Preis für die Tickets eines Automaten kann über den Konstruktor
* festgelegt werden.
* Ticketautomaten dieser Klasse prüfen, ob sinnvolle Geldbeträge
* eingeworfen werden, und drucken ein Ticket nur dann, wenn
* ausreichend Geld eingeworfen wurde.
*
* @author David J. Barnes und Michael Kölling
* @version 2006.03.30
*/
public class Ticketautomat
{
private int preis; // Der Preis eines Tickets dieses Automaten.
private int bisherGezahlt; // Der Betrag, der bisher vom Automatenbenutzer eingeworfen wurde.
private int gesamtsumme; // Die Geldsumme, die bisher von diesem Automaten eingenommen wurde.

/**
* Erzeuge einen Automaten, der Tickets zum angegebenen Preis
* (in Cent) ausgibt.
*/
public Ticketautomat (int ticketpreis)
{
int ticketautomat;
preis = ticketpreis;
bisherGezahlt = 0;
gesamtsumme = 0;
}

/**
* Liefere den Preis eines Tickets dieses Automaten (in Cent).
*/
public int gibPreis()
{
return preis;
}

/**
* Liefere die Höhe des Betrags, der für das nächste Ticket bereits
* eingeworfen wurde.
*/
public int gibBisherGezahltenBetrag()
{
return bisherGezahlt;
}

/**
* Nimm den angegebenen Betrag (in Cent) als Anzahlung für das
* nächste Ticket. Prüfe, ob der Betrag sinnvoll ist.
*/
public void geldEinwerfen(int betrag)
{
if (betrag > 0) {
bisherGezahlt = bisherGezahlt + betrag;
}
else {
System.out.println("Bitte nur positive Beträge verwenden: "

  • betrag);
    }
    }

/**
* Drucke ein Ticket, wenn genügend Geld eingeworfen wurde, und
* ziehe den Ticketpreis vom bisher gezahlten Betrag ab. Gib eine
* Fehlermeldung aus, falls noch Geld für ein Ticket fehlt.
*/
public void ticketDrucken()
{
if (bisherGezahlt >= preis) {
// Den Ausdruck eines Tickets simulieren.
System.out.println("##################");
System.out.println("# Die BlueJ-Linie");
System.out.println("# Ticket");
System.out.println("# " + preis + " Cent.");
System.out.println("##################");
System.out.println();

// Die Gesamtsumme um den Ticketpreis erhöhen.
gesamtsumme = gesamtsumme + preis;
// Den Preis von der bisherigen Bezahlung abziehen.
bisherGezahlt = bisherGezahlt - preis;
}
else {
System.out.println(„Sie müssen noch mindestens " +
(preis - bisherGezahlt) +
" Cent einwerfen.“);
}
}

/**
* Gib das Wechselgeld bzw. den bisher gezahlten Betrag zurück.
*/
public int wechselgeldAuszahlen()
{
int wechselgeld;
wechselgeld = bisherGezahlt;
bisherGezahlt = 0;
return wechselgeld;
}
}

Wäre dankbar für Eure Hilfe… denn ich bin schon nahe drann den computer aus dem fenster zu schmeissen…

Thanks

Auch hallo.

Mit main-Methode ist ein Konstrukt wie hier gemeint (Eclipse 3.1) :

public class Ticketautomat {

 /\*\*
 \* @param args
 \*/
 public static void main(String[] args) {
 // TODO Auto-generated method stub

 }

}

In den TODO Teil kommen die Konsolenausgaben und Methodenaufrufe, in die Methoden die Werte der Variablen (deren Werte wiederum via ‚return‘)

mfg M.L.

Hallo M.L.
Danke für deine msg. Das mit der Main-Methode ist mir soweit auch klar und das es diese braucht. Aber ich krieg es bei diesem Programm nicht hin eine Main methode zu erstellen die dann funktioniert… Leider.

Der Compiler meldet mir einen Fehler: cannot find symbol method Ticketautomat()

Wenn ich eine Main-Methode wie hier am Schluss ranhänge:

/**
* Die Klasse Ticketautomat modelliert einfache Ticketautomaten,
* die Tickets zu einem Einheitspreis herausgeben.
* Der Preis für die Tickets eines Automaten kann über den Konstruktor
* festgelegt werden.
* Ticketautomaten dieser Klasse prüfen, ob sinnvolle Geldbeträge
* eingeworfen werden, und drucken ein Ticket nur dann, wenn
* ausreichend Geld eingeworfen wurde.
*
* @author David J. Barnes und Michael Kölling
* @version 2006.03.30
*/
public class Ticketautomat
{

private int preis; // Der Preis eines Tickets dieses Automaten.

private int bisherGezahlt; // Der Betrag, der bisher vom Automatenbenutzer eingeworfen wurde.

private int gesamtsumme; // Die Geldsumme, die bisher von diesem Automaten eingenommen wurde.

/**
* Erzeuge einen Automaten, der Tickets zum angegebenen Preis
* (in Cent) ausgibt.
*/
public Ticketautomat (int ticketpreis)
{
int ticketautomat;
preis = ticketpreis;
bisherGezahlt = 0;
gesamtsumme = 0;
}

/**
* Liefere den Preis eines Tickets dieses Automaten (in Cent).
*/
public int gibPreis()
{
return preis;
}

/**
* Liefere die Höhe des Betrags, der für das nächste Ticket bereits
* eingeworfen wurde.
*/
public int gibBisherGezahltenBetrag()
{
return bisherGezahlt;
}

/**
* Nimm den angegebenen Betrag (in Cent) als Anzahlung für das
* nächste Ticket. Prüfe, ob der Betrag sinnvoll ist.
*/
public void geldEinwerfen(int betrag)
{
if (betrag > 0) {
bisherGezahlt = bisherGezahlt + betrag;
}
else {
System.out.println("Bitte nur positive Beträge verwenden: "

  • betrag);
    }
    }

/**
* Drucke ein Ticket, wenn genügend Geld eingeworfen wurde, und
* ziehe den Ticketpreis vom bisher gezahlten Betrag ab. Gib eine
* Fehlermeldung aus, falls noch Geld für ein Ticket fehlt.
*/
public void ticketDrucken()
{
if (bisherGezahlt >= preis) {
// Den Ausdruck eines Tickets simulieren.
System.out.println("##################");
System.out.println("# Die BlueJ-Linie");
System.out.println("# Ticket");
System.out.println("# " + preis + " Cent.");
System.out.println("##################");
System.out.println();

// Die Gesamtsumme um den Ticketpreis erhöhen.
gesamtsumme = gesamtsumme + preis;
// Den Preis von der bisherigen Bezahlung abziehen.
bisherGezahlt = bisherGezahlt - preis;
}
else {
System.out.println(„Sie müssen noch mindestens " +
(preis - bisherGezahlt) +
" Cent einwerfen.“);
}
}

/**
* Gib das Wechselgeld bzw. den bisher gezahlten Betrag zurück.
*/
public int wechselgeldAuszahlen()
{
int wechselgeld;
wechselgeld = bisherGezahlt;
bisherGezahlt = 0;
return wechselgeld;
}

public static void main (String[] args)
{
Ticketautomat();
}
}

Ich weiss jetzt nicht, liegt es daran weil die Klasse auch Ticketautomat heisst oder weil, habe es allerdings auch mit anderen Namen versucht aber es klappt einfach nicht…

Greez Bruno

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hallo

probiers mal so:

public static void main (String[] args)
{
 Ticketautomat me = new Ticketautomat() ;
 me.Ticketautomat();
}

dein problem: die main-methode ist statisch (das „static“), d.h. die methode existiert im klassenkontext. die anderen methoden sind nicht statisch, sind also sogenannte member-methods. diese „existieren“ nur im zusammenhang mit einer instanz deiner klasse. damit die statische methode also eine nicht statische aufrufen kann, muss sie eine referenz auf eine instanz der klasse haben.

daher deklariert die main-methode zuerst eine objektvariable vom typ deiner klasse und erzeugt dann eine neue instanz mit dem new-befehl. die referenz auf diese instanz wird der variable zugewiesen. nun kannst du von dieser instanz die member-methods aufrufen.

natürlich hättest du alternativ auch alle anderen methoden zu statischen deklarieren können - was ein typischer anfängerfehler ist. wer so programmiert, sollte lieber bei C bleiben und die finger von objektorientierten sprachen lassen.

kleiner tipp: versuche zuerst, das konzept von klassen und instanzen zu verstehen, bevor du weiter vorgehst. ansonsten wirst du ein sehr schlechter java-programmierer…

lg
erwin

Hallo,

Der Compiler meldet mir einen Fehler: cannot find symbol
method Ticketautomat()

public static void main (String[] args)
{
Ticketautomat();
}
}

  1. Deine Klasse hat keinen Default Konstruktor (also ohne Argumente), es wird ein integer Wert erwartet

  2. Der Konstruktor wird mit dem Keyword new aufgerufen:

    public static void main(String[] args)
    {
    Ticketautomat ta = new Ticketautomat(1);
    }

Gruß
Heavy