JavaEditor - Quellcode Fehler

bilel01

Mitglied
Aufgabe:
  1. Implementieren Sie ein Programm zu Ihrem Handy-Automaten (falls Sie keinen Automaten haben, wählen Sie eine der Lösungen, die wir am 12.10. durchgesprochen haben). Das Programm soll in einer Endlosschleife Kommandos von der Tastatur einlesen und entsprechend der Eingabe in einen neuen Zustand wechseln. Der neue Zustand soll jeweils als Text ausgegeben werden.
  2. Zusatzaufgabe: Implementieren Sie eine Hilfsfunktion, die bei entsprechender Eingabe (z.B. h) eine Übersicht aller Kommandos ausgibt.
Ich hab die Aufgaben versucht so gut es geht zu bearbeiten,f geht, aber die Befehle l und h gehen nicht bei starten der Applikation, und bei k gehen nur die ersten 2. Vielleicht seht ihr womöglich, wo hier die/der Fehler liegt. Damit ihr besser versteht, was ich genauer meine, hier ist der Quellcode.

/**
* k,l oder h für den nächsten Zustand
* f für Übersicht über die Kommandos
* Schluss um das programm zu beenden
*/

import java.util.Scanner;

public class Handyautomat {

enum Zustand {
ShutdownModus,GesperrtDisplayAn,GesperrtDisplayAus,Entsperrt,Aus,Pin
}

public static void main(String[] args) {
String I;
Scanner eingabewert = new Scanner(System.in);
Zustand aktuellerZustand = Zustand.GesperrtDisplayAus;
int i = 1;

System.out.println("Drücke k,l oder h um in den nächsten Zustand zu kommen.");
do {
I = eingabewert.next();

if (I.equals("k")) {
switch(aktuellerZustand){
case GesperrtDisplayAn:
aktuellerZustand = Zustand.GesperrtDisplayAus;
System.out.println("Das Gerätedisplay ist angeschaltet.");
break;
case GesperrtDisplayAus:
aktuellerZustand = Zustand.GesperrtDisplayAn;
System.out.println("Das Gerätedisplay ist ausgeschaltet.");
break;
case ShutdownModus:
aktuellerZustand = Zustand.ShutdownModus;
System.out.println("Shutdown Modus ist geöffnet.");
break;
case Entsperrt:
aktuellerZustand = Zustand.GesperrtDisplayAus;
System.out.println("Das Gerätedisplay ist ausgeschaltet.");
break;
case Aus:
aktuellerZustand = Zustand.Aus;
System.out.println("Das Gerät ist ausgeschaltet.");
break;
case Pin:
aktuellerZustand = Zustand.GesperrtDisplayAus;
System.out.println("Das Gerätedisplay ist ausgeschaltet.");
break;
}
if (I.equals("l")) {
switch(aktuellerZustand){
case GesperrtDisplayAn:
aktuellerZustand = Zustand.ShutdownModus;
System.out.println("Shutdown Modus ist geöffnet.");
break;
case GesperrtDisplayAus:
aktuellerZustand = Zustand.ShutdownModus;
System.out.println("Shutdown Modus ist geöffnet.");
break;
case ShutdownModus:
aktuellerZustand = Zustand.ShutdownModus;
System.out.println("ShutdownModus ist geöffnet.");
break;
case Entsperrt:
aktuellerZustand = Zustand.ShutdownModus;
System.out.println("ShutdownModus ist geöffnet.");
break;
case Aus:
aktuellerZustand = Zustand.GesperrtDisplayAn;
System.out.println("Das Gerätedisplay ist angeschaltet.");
break;
case Pin:
aktuellerZustand = Zustand.ShutdownModus;
System.out.println("Shutdown Modus ist geöffnet.");
break;
}
if (I.equals("h")) {
switch(aktuellerZustand){
case GesperrtDisplayAn:
aktuellerZustand = Zustand.Pin;
System.out.println("Pineingabe ist geöffnet.");
break;
case GesperrtDisplayAus:
aktuellerZustand = Zustand.GesperrtDisplayAn;
System.out.println("Das Gerätedisplay ist angeschaltet.");
break;
case ShutdownModus:
aktuellerZustand = Zustand.ShutdownModus;
System.out.println("ShutdownModus ist geöffnet.");
break;
case Entsperrt:
aktuellerZustand = Zustand.Entsperrt;
System.out.println("Das Gerät wurde erfolgreich entsperrt.");
break;
case Aus:
aktuellerZustand = Zustand.Aus;
System.out.println("Das Geräte ist ausgeschaltet.");
break;
case Pin:
aktuellerZustand = Zustand.Entsperrt;
System.out.println("Das Gerät wurde erfolgreich entsperrt.");
break;
}
} // end of if
} // end of switch

} // end of if

if (I.equals("f")) {
System.out.println("k: Kurzer Druck auf An-Aus Knopf,l: Langer Druck auf An-Aus Knopf,h:Kurzer Duck auf Home-Button");
} // end of if

else {
System.out.println("Drücke k,l oder h um in den nächsten Zustand zu kommen.");
}

if (I.equals("Schluss")){
i = 3;
}
} while (i<2);
} // end of main

} // end of class Handyautomat
 

bilel01

Mitglied
Java:
import java.util.Scanner;

public class Handyautomat {

enum Zustand {
ShutdownModus,GesperrtDisplayAn,GesperrtDisplayAus,Entsperrt,Aus,Pin
}

public static void main(String[] args) {
String I;
Scanner eingabewert = new Scanner(System.in);
Zustand aktuellerZustand = Zustand.GesperrtDisplayAus;
int i = 1;

System.out.println("Drücke k,l oder h um in den nächsten Zustand zu kommen.");
do {
I = eingabewert.next();

if (I.equals("[B]k[/B]")) {
switch(aktuellerZustand){
case GesperrtDisplayAn: 
aktuellerZustand = Zustand.GesperrtDisplayAus;
System.out.println("Das Gerätedisplay ist angeschaltet.");
break; 
case GesperrtDisplayAus: 
aktuellerZustand = Zustand.GesperrtDisplayAn;
System.out.println("Das Gerätedisplay ist ausgeschaltet.");
break;
case ShutdownModus: 
aktuellerZustand = Zustand.ShutdownModus;
System.out.println("Shutdown Modus ist geöffnet.");
break;
case Entsperrt:
aktuellerZustand = Zustand.GesperrtDisplayAus; 
System.out.println("Das Gerätedisplay ist ausgeschaltet.");
break; 
case Aus:
aktuellerZustand = Zustand.Aus;
System.out.println("Das Gerät ist ausgeschaltet.");
break;
case Pin:
aktuellerZustand = Zustand.GesperrtDisplayAus;
System.out.println("Das Gerätedisplay ist ausgeschaltet.");
break;
}
if (I.equals("[B]l[/B]")) { 
switch(aktuellerZustand){
case GesperrtDisplayAn: 
aktuellerZustand = Zustand.ShutdownModus;
System.out.println("Shutdown Modus ist geöffnet.");
break; 
case GesperrtDisplayAus: 
aktuellerZustand = Zustand.ShutdownModus;
System.out.println("Shutdown Modus ist geöffnet.");
break;
case ShutdownModus: 
aktuellerZustand = Zustand.ShutdownModus;
System.out.println("ShutdownModus ist geöffnet.");
break;
case Entsperrt:
aktuellerZustand = Zustand.ShutdownModus; 
System.out.println("ShutdownModus ist geöffnet.");
break; 
case Aus:
aktuellerZustand = Zustand.GesperrtDisplayAn;
System.out.println("Das Gerätedisplay ist angeschaltet.");
break;
case Pin:
aktuellerZustand = Zustand.ShutdownModus;
System.out.println("Shutdown Modus ist geöffnet.");
break;
}
if (I.equals("[B]h[/B]")) {
switch(aktuellerZustand){
case GesperrtDisplayAn: 
aktuellerZustand = Zustand.Pin;
System.out.println("Pineingabe ist geöffnet.");
break; 
case GesperrtDisplayAus: 
aktuellerZustand = Zustand.GesperrtDisplayAn;
System.out.println("Das Gerätedisplay ist angeschaltet.");
break;
case ShutdownModus: 
aktuellerZustand = Zustand.ShutdownModus;
System.out.println("ShutdownModus ist geöffnet.");
break;
case Entsperrt:
aktuellerZustand = Zustand.Entsperrt; 
System.out.println("Das Gerät wurde erfolgreich entsperrt.");
break; 
case Aus:
aktuellerZustand = Zustand.Aus;
System.out.println("Das Geräte ist ausgeschaltet.");
break;
case Pin:
aktuellerZustand = Zustand.Entsperrt;
System.out.println("Das Gerät wurde erfolgreich entsperrt.");
break;
} 
} // end of if
} // end of switch

} // end of if

if (I.equals("[B]f[/B]")) {
System.out.println("k: Kurzer Druck auf An-Aus Knopf,l: Langer Druck auf An-Aus Knopf,h:Kurzer Duck auf Home-Button");
} // end of if 

else {
System.out.println("Drücke k,l oder h um in den nächsten Zustand zu kommen.");
}

if (I.equals("Schluss")){
i = 3;
} 
} while (i<2);
} // end of main

} // end of class Handyautomat
 

Robat

Top Contributor
Hab mir mal die Mühe gemacht und deinen Code ordentlich formatiert und "unwichtige" Sachen raus genommen.
Schau dir mal den Aufbau an - vielleicht siehst du ja den Fehler ;)
(Tipp: Schau mal auf die Klammerung)

Java:
do {
    I = eingabewert.next();
    if (I.equals("k")) {
        switch (aktuellerZustand) {
            //...
        }
        if (I.equals("l")) {
            switch (aktuellerZustand) {
                //....
            }
            if (I.equals("h")) {
                switch (aktuellerZustand) {
                    // ...
                }
            } 
        } 
    } 

    if (I.equals("f")) {
        //...
    }
    else {
       // ...
    }

    if (I.equals("Schluss")) {
        // ...
    }
} while (i < 2);
 

Robat

Top Contributor
Nicht raten.. schauen.
Du willst alle Fälle k, l, und h unabhängig von einander prüfen.
Momentan hängen aber l und h davon ab, ob k geschrieben wurde ;)
 

bilel01

Mitglied
Achso.. sorry ich bin noch Anfänger. Wie kann ich das so umschreiben, dass ich die Fälle unabhängig von einander prüfen kann?
 

bilel01

Mitglied
Die ifs sollten hintereinander und nicht ineinander stehen.

So hab das dann doch im nachhinein jetzt verstanden. Aber wenn ich das Programm nun teste und App. starte und auf die cases schalte, schaltet er nicht auf alle. Nur auf einige wenige. Bei k auf case 1 und 2, bei l auf 1 (und glaub einige weitere, also Shutdown Modus wird angezeigt) und bei h wird auch nur Shutdown modus angezeigt. Also es funktioniert aufjedenfall besser, nur noch nicht einwandfrei, also dass auf alle cases geschaltet werden. Hoffe man versteht das Anliegen
 

Neue Themen


Oben