Fehlersuche-kann mir jemand helfen?

Diskutiere Fehlersuche-kann mir jemand helfen? im Java Basics - Anfänger-Themen Bereich.
G

Garfild2015

Bei mir zeigt das Programm noch Fehler an, muss ich noch irgendwas als import drüber schreiben ?




Java:
public class Reise {
    enum Reiseziel {
        München(2250),
        Hamburg(1550),
        Düsseldorf(750),
        Stuttgart(850),
        Berlin(1250);

        private int streckenpreis;

        private Reiseziel(int streckenpreis) {
            this.streckenpreis = streckenpreis;
        }
    }

   
  public static void main(String[] args) {
    System.out.println("Bitte wähle eine Strecke");

    for (int i = 0; i < Reiseziel.values().length; i++) {
        Reiseziel moeglichesReiseziel = Reiseziel.values()[i];
        System.out.println(i + ": " + moeglichesReiseziel.name());
    }
    try {
        int auswahl = new Scanner(System.in).nextInt();
        Reiseziel gewaehltesReiseziel = Reiseziel.values()[auswahl];
        System.out.println("Streckenpreis von " + gewaehltesReiseziel.streckenpreis + " für das Reiseziel " + gewaehltesReiseziel.name());
    } catch (ArrayIndexOutOfBoundsException | InputMismatchException e) {
        System.out.println("Ungültige Auswahl.");
    }
}
}
Ausgabe:
Code:
Bitte wähle eine Strecke
0: München
1: Hamburg
2: Düsseldorf
3: Stuttgart
4: Berlin
0
Streckenpreis von 2250 für das Reiseziel München


Du kannst die Enum dann beliebig erweitern ohne den Rest anfassen zu müssen. Also jedes weitere mögliche Reiseziel ist nur eine Zeile Code
Code:
import java.util.List;
import java.util.ArrayList;
import java.util.Scanner;
public class Ticketautomat{
    int streckenpreis;
    String  linie;
    public class Reise {
        enum Reiseziel {            Fehler wird angezeigt:enum declaration allowed onlin in static contexts
            München(2250),
            Hamburg(1550),
            Düsseldorf(750),
            Stuttgart(850),
            Berlin(1250);

            private int streckenpreis;

            private Reiseziel(int streckenpreis) {
                this.streckenpreis = streckenpreis;
            }
        }

        public static void main(String[] args) {          Fehler wird angezeigt:Illegal staic declaration in inner class Ticketautomat
            System.out.println("Bitte wähle eine Strecke");

            for (int i = 0; i < Reiseziel.values().length; i++) {
                Reiseziel moeglichesReiseziel = Reiseziel.values()[i];
                System.out.println(i + ": " + moeglichesReiseziel.name());
            }
            try {
                int auswahl = new Scanner(System.in).nextInt();
                Reiseziel gewaehltesReiseziel = Reiseziel.values()[auswahl];
                System.out.println("Streckenpreis von " + gewaehltesReiseziel.streckenpreis + " für das Reiseziel " + gewaehltesReiseziel.name());
            } catch (ArrayIndexOutOfBoundsException | InputMismatchException e) {   Feheler wird angezeigt: cannot find symbol: InputMismatchExpection
                System.out.println("Ungültige Auswahl.");
            }
        }
    }
}
 
MoxxiManagarm

MoxxiManagarm

Mein Code war nur ein Beispiel! Er war keinesfalls dazu geeignet ihn copy&paste einfach in deine Klasse reinzupacken. Nur für den Wiedererkennungswert habe ich deine Werte verwendet. Er sollte nur zeigen wie das Enum funktionieren kann. Bitte mache entsprechende Anpassungen. Du könntest z.B. auch den Namen eingeben lassen statt Nummer und den String per Reiseziel.valueOf(eingabeName) wieder dem Enum zuordnen. Dann müsstest du aber auch eine andere Exception abfangen. Hier mal diese andere Variante (wieder nur Beispiel!):
Java:
public class Reise {
    enum Reiseziel {
        München(2250),
        Hamburg(1550),
        Düsseldorf(750),
        Stuttgart(850),
        Berlin(1250);

        private int streckenpreis;

        private Reiseziel(int streckenpreis) {
            this.streckenpreis = streckenpreis;
        }
    }

    public static void main(String[] args) {
        System.out.println("Bitte wähle eine Strecke");

        for (Reiseziel moeglichesReiseziel : Reiseziel.values()) {
            System.out.println("*" + moeglichesReiseziel.name());
        }
        try {
            System.out.print("> ");
            String auswahl = new Scanner(System.in).next();
            Reiseziel gewaehltesReiseziel = Reiseziel.valueOf(auswahl);
            System.out.println("Streckenpreis von " + gewaehltesReiseziel.streckenpreis + " für das Reiseziel " + gewaehltesReiseziel.name());
        } catch (IllegalArgumentException e) {
            System.out.println("Ungültige Auswahl.");
        }
    }
}
Ausgabe:
Code:
Bitte wähle eine Strecke
*München
*Hamburg
*Düsseldorf
*Stuttgart
*Berlin
> Stuttgart
Streckenpreis von 850 für das Reiseziel Stuttgart
 
Zuletzt bearbeitet:
G

Garfild2015

Mein Code war nur ein Beispiel! Er war keinesfalls dazu geeignet ihn copy&paste einfach in deine Klasse reinzupacken. Er sollte nur zeigen wie das Enum funktionieren kann. Bitte mache entsprechende Anpassungen. Du könntest z.B. auch den Namen eingeben lassen statt Nummer und den String per Reiseziel.valueOf(eingabeName) wieder dem Enum zuordnen. Dann müsstest du aber auch eine andere Exception abfangen. Hier mal diese andere Variante (wieder nur Beispiel!):
Java:
public class Reise {
    enum Reiseziel {
        München(2250),
        Hamburg(1550),
        Düsseldorf(750),
        Stuttgart(850),
        Berlin(1250);

        private int streckenpreis;

        private Reiseziel(int streckenpreis) {
            this.streckenpreis = streckenpreis;
        }
    }

    public static void main(String[] args) {
        System.out.println("Bitte wähle eine Strecke");

        for (Reiseziel moeglichesReiseziel : Reiseziel.values()) {
            System.out.println("*" + moeglichesReiseziel.name());
        }
        try {
            System.out.print("> ");
            String auswahl = new Scanner(System.in).next();
            Reiseziel gewaehltesReiseziel = Reiseziel.valueOf(auswahl);
            System.out.println("Streckenpreis von " + gewaehltesReiseziel.streckenpreis + " für das Reiseziel " + gewaehltesReiseziel.name());
        } catch (IllegalArgumentException e) {
            System.out.println("Ungültige Auswahl.");
        }
    }
}
Ausgabe:
Code:
Bitte wähle eine Strecke
*München
*Hamburg
*Düsseldorf
*Stuttgart
*Berlin
> Stuttgart
Streckenpreis von 850 für das Reiseziel Stuttgart
Danke für ihre Mühe, aber so weit sind wir in Informatik noch nicht und ich glaube ich mache das lieber mit dem switch-case, dass habe ich nämlich verstanden.
 
MoxxiManagarm

MoxxiManagarm

Ist immer schwierig einzuschätzen, was jemand schon kennt und was nicht. Switch-Case ist total in Ordnung, das Enum war mehr auf deine Frage mit dem Auflisten bezogen. Dann musst du das wohl parallel führen
 
G

Garfild2015

Ist immer schwierig einzuschätzen, was jemand schon kennt und was nicht. Switch-Case ist total in Ordnung, das Enum war mehr auf deine Frage mit dem Auflisten bezogen. Dann musst du das wohl parallel führen
Nach ihrer Liste würde jetzt die Ticketauswahl kommen.
Ich habe diese ja in einzelne Methode gemacht, würden sie das auch machen oder alle in eine Methode ?
 
G

Garfild2015

Zeig mal... kann ich keine allgemeine Antwort dazu geben
Code:
public void KinderTickets(int neueKindertickets){
        kindertickets=neueKindertickets;
        preis= (neueKindertickets*preis)/2;

    }

    public void Erwachsenetickets(int neueErwachsenentickets){
        erwachsenentickets=neueErwachsenentickets;
        preis=preis;
    }
 
MoxxiManagarm

MoxxiManagarm

Ich denke ich würde es in der Methode lassen, aber sie abändern.
1. Methoden sind typischer Weise Aktionen. Benenne sie auch so. z.B. "addChildTickets" (man beachte außerdem den konventionellen lowerCamelCase)
2. Den Wert "kindertickets" (bzw. "erwachsenentickets") brauchst du nicht speichern, außer du möchtest diese Anzahl nochmal beim Drucken des Tickets verwenden
3. Du darfst preis natürlich nicht fest zuweisen, sondern musst diesen erhöhen. Das kannst du mit dem += Operator machen
Java:
zuZahlenderPreis += anzahlKinderTickets * streckenNormalPreis / 2;
// bzw.
zuZahlenderPreis += anzahlErwachsenenTickets * streckenNormalPreis;
 
G

Garfild2015

Ich denke ich würde es in der Methode lassen, aber sie abändern.
1. Methoden sind typischer Weise Aktionen. Benenne sie auch so. z.B. "addChildTickets" (man beachte außerdem den konventionellen lowerCamelCase)
2. Den Wert "kindertickets" (bzw. "erwachsenentickets") brauchst du nicht speichern, außer du möchtest diese Anzahl nochmal beim Drucken des Tickets verwenden
3. Du darfst preis natürlich nicht fest zuweisen, sondern musst diesen erhöhen. Das kannst du mit dem += Operator machen
Java:
zuZahlenderPreis += anzahlKinderTickets * streckenNormalPreis / 2;
// bzw.
zuZahlenderPreis += anzahlErwachsenenTickets * streckenNormalPreis;
Ich würde gerne die Option dabei schreiben, dass man jeder Zeit die Anzahl der Tickets abrufen kann.
Wie kann man das machen?
 
MoxxiManagarm

MoxxiManagarm

Dann kannst du die Zahl ruhig speichern. So lange du den gespeicherten Wert irgendwann rufen willst ist das ok. Sonst wäre es überflüsdig
 
G

Garfild2015

Mache ich das dann mit return?
Wenn ich es mi return mache, kommte eine Fehlermeldung: incompertible types: unexpected return value

Code:
public void KindertickesHinzufuegen(int Kindertickets) {
        anzahlKindertickets= Kindertickets;   
        zuZahlenderPreis += anzahlKindertickets * streckenpreis / 2; 

    }

    public void KinderticketsAnzahlAbrufen(){
        return anzahlKindertickets; 
    }

    public void ErwachsenenticketsHinzufügen(int Erwachsenentickets){
        anzahlErwachsenentickets=Erwachsenentickets; 
        zuZahlenderPreis += anzahlErwachsenentickets * streckenpreis; 
    }
    
    public void ErwachsenenticketsAbrufen(){
     return anzahlErwachsenentickets;   
    }
 
G

Garfild2015

Wenn ich es mi return mache, kommte eine Fehlermeldung: incompertible types: unexpected return value

Code:
public void KindertickesHinzufuegen(int Kindertickets) {
        anzahlKindertickets= Kindertickets;  
        zuZahlenderPreis += anzahlKindertickets * streckenpreis / 2;

    }

    public void KinderticketsAnzahlAbrufen(){
        return anzahlKindertickets;
    }

    public void ErwachsenenticketsHinzufügen(int Erwachsenentickets){
        anzahlErwachsenentickets=Erwachsenentickets;
        zuZahlenderPreis += anzahlErwachsenentickets * streckenpreis;
    }
   
    public void ErwachsenenticketsAbrufen(){
     return anzahlErwachsenentickets;  
    }
hab den Fehler gefunden :)
 
G

Garfild2015

Dann kannst du die Zahl ruhig speichern. So lange du den gespeicherten Wert irgendwann rufen willst ist das ok. Sonst wäre es überflüsdig
Code:
    public void geldEinwerfen(int betrag)
    {
        if(betrag==10 || betrag ==20|| betrag==50|| betrag ==50|| betrag==100|| betrag==200||betrag==500||betrag==1000){
            bisherGezahlt= bisherGezahlt+betrag;
        } else{
            System.out.println("Der Betrag ist nicht zulässig. Bitte 10, 20 oder 50 Cent,1 Euro,2 Euro,5 Euro oder 10 Euro einwerfen");
        }

    }
Würden sie hier dran was ändern ?
 
MoxxiManagarm

MoxxiManagarm

Nur ne Kleinigkeit. Die kannst die eine Zeile verkürzen zu

bisherGezahlt += betrag;
 
G

Garfild2015

Nur ne Kleinigkeit. Die kannst die eine Zeile verkürzen zu

bisherGezahlt += betrag;
Ok,
Erstmal Danke für die ganze Hilfe.
Ich würde gerne eine Methode für die Gesamtsumme hinzufügen, aber ich weiß nicht genau wie :)
Ich habe den bisherigen Code nochmal komplett mitgepostet.
Code:
public class Ticketautomat{
    int streckenpreis;
    int anzahlKindertickets;
    int anzahlErwachsenentickets;
    int zuZahlenderPreis;
    int bisherGezahlt;
    String  linie;
    public void Streckenauswahl(String neueLinie)
    {
        switch (neueLinie) {
            case "München":
            streckenpreis=2250;
            break;

            case "Hamburg":
            streckenpreis=1550;
            break;

            case "Düsseldorf":
            streckenpreis=750;
            break;

            case "Stuttgart":
            streckenpreis=850;
            break;

            case "Berlin":
            streckenpreis=1250;
            break;

            default:
            System.out.println("Ziel nicht verfügbar. Bitte neues Ziel eingeben");  //  eine Fehlermeldung ausgeben!
            return; // return statt break um die Methode zu verlassen.
        }

        linie = neueLinie;
    }

    public void KindertickesHinzufuegen(int Kindertickets) {
        anzahlKindertickets= Kindertickets;   
        zuZahlenderPreis += anzahlKindertickets * streckenpreis / 2; 

    }

    public int KinderticketsAnzahlAbrufen(){
        return anzahlKindertickets; 
    }

    public void ErwachsenenticketsHinzufügen(int Erwachsenentickets){
        anzahlErwachsenentickets=Erwachsenentickets; 
        zuZahlenderPreis += anzahlErwachsenentickets * streckenpreis; 
    }

    public int ErwachsenenticketsAbrufen(){
        return anzahlErwachsenentickets;   
    }

    public void geldEinwerfen(int betrag)
    {
        if(betrag==10 || betrag ==20|| betrag==50|| betrag ==50|| betrag==100|| betrag==200||betrag==500||betrag==1000){
            bisherGezahlt+=betrag;
        } else{
            System.out.println("Der Betrag ist nicht zulässig. Bitte 10, 20 oder 50 Cent,1 Euro,2 Euro,5 Euro oder 10 Euro einwerfen");
        }

    }

}
 
Thema: 

Fehlersuche-kann mir jemand helfen?

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben