Die Switch-Anweisung funktioniert nicht

Dieses Thema im Forum "Programmierung" wurde erstellt von AnonymusChaotic, 17. April 2015.

  1. AnonymusChaotic
    Offline

    AnonymusChaotic

    Registriert seit:
    22. November 2013
    Beiträge:
    762
    Ort:
    Wien, Österreich
    Minecraft:
    AnonymusChaotic
    Ich bin gerade dabei, mir die Java-Basics beizubringen (mit der Insel :)), und versuche mich erstmal an kleinen Konsolenprogrammen, die mathematische Berechnungen ausführen können.

    Warum wirft mir das Programm immer ERROR!!!, also das default aus?
    Code (Text):
    1.  
    2. package start;
    3.  
    4. public class Test {
    5.  
    6.     public static void main(String[] args) {
    7.         System.out.print("Gib die Nummer der Formel ein: ");
    8.         int formelnummer = new java.util.Scanner(System.in).nextInt();
    9.        
    10.        
    11.         switch (formelnummer)
    12.        {
    13.          case '1':
    14.           {
    15.           System.out.println("Du hast [1] Zinsen- und Ratenberechnung gewählt!");
    16.           formeln.Zinsen.zinsen_begin();
    17.           }
    18.           break;
    19.          case '2':
    20.            {
    21.            System.out.println("Du hast [2] xxxxxxxxxxxxxxx gewählt!");
    22.            formeln.Zinsen.zinsen_begin();
    23.            }
    24.            break;
    25.          case '3':
    26.            {
    27.            System.out.println("Du hast [3] xxxxxxxxxxxxxxx gewählt!");
    28.            formeln.Zinsen.zinsen_begin();
    29.            }
    30.            break;
    31.          case '4':
    32.            {
    33.           System.out.println("Du hast [4] xxxxxxxxxxxxxxx gewählt!");
    34.            formeln.Zinsen.zinsen_begin();
    35.            }
    36.            break;
    37.          default:
    38.           System.out.println("ERROR!!!");
    39.           break;
    40.        }
    41.     }
    42.  
    43. }
    44.  
    45.  
    46.  
    Freue mich über jede Hilfe!
     
    #1
  2. Thalion
    Offline

    Thalion

    Registriert seit:
    22. Juli 2014
    Beiträge:
    25
    Ort:
    Berlin
    Minecraft:
    Spartaner_v1
    Hallöchen,

    Was du dort prüfst sind Character, vergleiche mit Zahlen ohne String/Characterzeichen ( "" / '' ).

    case '3': ==> case 3:

    Mfg,
    Spartaner
     
    #2
    MaxCode und AnonymusChaotic gefällt das.
  3. AnonymusChaotic
    Offline

    AnonymusChaotic

    Registriert seit:
    22. November 2013
    Beiträge:
    762
    Ort:
    Wien, Österreich
    Minecraft:
    AnonymusChaotic
    Ah, ok ^^
    Danke :)

    Könnte ich die Zahl im Fall dieser Abfrage auch als String ablegen, damit vermeide ich die Gefahr irgendwelcher Ungenauigkeiten oder macht man das nicht?
     
    #3
  4. Thalion
    Offline

    Thalion

    Registriert seit:
    22. Juli 2014
    Beiträge:
    25
    Ort:
    Berlin
    Minecraft:
    Spartaner_v1
    Da du hier ein Konsolenmenü hast, ist das relativ egal, ob du das als String oder Zahl einliest. Da ich nicht weis, wie weit du in die Materie vorgedrungen bist, wäre es wahrscheinlich einfacher beim Zahlensystem zu bleiben.
    Generell sollte man das schnell intus haben, wie man String, Character und Zahlen bzw. Bytes schreibt.

    Mfg
     
    #4
  5. AnonymusChaotic
    Offline

    AnonymusChaotic

    Registriert seit:
    22. November 2013
    Beiträge:
    762
    Ort:
    Wien, Österreich
    Minecraft:
    AnonymusChaotic
    Das mit den Variablen kommt sicher mit der Übung. Das hier ist mein erstes Programm das etwas umfangreicher werden soll als 5 oder 10 Codezeilen.
    An Char als Variablentyp hab ich noch garnicht gedacht... Ich glaub, das versuche ich mal :)
     
    #5
  6. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Char ist in deinem Beispiel wohl die schlechteste Lösung, da es genau ein Zeichen ist. '11' ist zum Beispiel nicht gültig. Einen String zu benutzen hat den Vorteil, dass du in der Konsole ein Wort statt eine Zahl eingeben musst, was die Benutzung vereinfacht. Es besteht auch die Möglichkeit, dass du eine Zahl oder ein Wort eingeben kannst, dabei muss aber die Zahl auch als String gehandhabt werden.
     
    #6
    Heldin, Eisphoenix und MrGoms gefällt das.
  7. GermanUbuntu
    Online

    GermanUbuntu

    Ich würde hier doch bei einem char bleiben,
    Im Performance bereich ist es besser
     
    #7
  8. 可愛い
    Offline

    可愛い

    Registriert seit:
    19. Mai 2014
    Beiträge:
    654
    Im Performancebereich ist es scheiß egal, weil die Spannungsschwankungen in deinem Stromnetz mehr auswirkungen auf die Geschwindigkeit der CPU haben, als dieser Mist.

    Mit Assembler wärs übrigens noch schneller.
     
    #8
  9. Angel
    Offline

    Angel Moderator Redakteur

    Registriert seit:
    2. März 2012
    Beiträge:
    1.442
    Ort:
    Niedersachsen
    Minecraft:
    BeatingAngel
    Moderativer Hinweis

    Bleibt bitte beim Thema (die Beiträge, die diesen Hinweis notwendig machten wurden bereits entfernt).
     
    #9
    AnonymusChaotic gefällt das.
  10. AnonymusChaotic
    Offline

    AnonymusChaotic

    Registriert seit:
    22. November 2013
    Beiträge:
    762
    Ort:
    Wien, Österreich
    Minecraft:
    AnonymusChaotic
    Habe schon wieder ein Problem...
    Warum muss ich ein } setzen, wo doch definitiv ein ; gehört?
    Code (Text):
    1.  
    2. Multiple markers at this line
    3.     - Syntax error on token ";", { expected after
    4.     this token
    5.  
    Code (Text):
    1.  
    2. Description    Resource    Path    Location    Type
    3. Syntax error on token ";", { expected after this token    faktorielle.java    /Mathinator/src/formeln    line 8    Java Problem
    4. Syntax error on token "double", invalid AnnotationName    faktorielle.java    /Mathinator/src/formeln    line 5    Java Problem
    5.  
    Code (Text):
    1. package formeln;
    2.  
    3. public class faktorielle {
    4.  
    5.     public static faktorielle2 (double variable){
    6.  
    7.  
    8.         double n = 1;
    9.  
    10.             while (n > 1)
    11.             {
    12.                 variable = variable * n;
    13.                 n = n - 1;
    14.             }
    15.         return variable;
    16.     }
    17.  
    18. }
    19.  
    20.  
     
    #10
  11. Major_Sauce
    Offline

    Major_Sauce

    Registriert seit:
    18. September 2013
    Beiträge:
    27
    Minecraft:
    Major_Sauce
    Mal ne Frage, benutzt du eine IDE ?
    Also sowas wie Eclipse oder Netbeans zum Bleistift.

    Wenn ich mich nicht irre fehlt da noch die Definition der Methode, ist es eine void, boolean ?
    Nach dem was du da zurückgibst wird es wohl ein double sein -> public static double faktorielle2() {... bla

    Ps: Die Loop würde ich durch eine for-Schleife ersetzen, ist übersichtlicher und braucht nicht so viele Zeilen.
    Wenn du sonst noch Probleme hast kannst du mich auch per PN anschreiben, dann kann man das auch mal in Skype oder Ts zusammen anschauen, sollte wohl besser gehen.

    mfg Major_Sauce
     
    #11
  12. AnonymusChaotic
    Offline

    AnonymusChaotic

    Registriert seit:
    22. November 2013
    Beiträge:
    762
    Ort:
    Wien, Österreich
    Minecraft:
    AnonymusChaotic
    Ich nutze Eclipse

    Es ist eine double, nur das habe ich rausgehauen, weil es eine Fehlermeldung gegeben hat.
    Habe auch schon daran gedacht, aber ich will die For-schleife nicht überladen, mit while geht das schön übersichtlich.

    Ich würde mich freuen, wenn Du mich bei meinen Java-problemchen unterstützen würdest, im Forum ist es aber möglicherweise schneller.
     
    #12
  13. Major_Sauce
    Offline

    Major_Sauce

    Registriert seit:
    18. September 2013
    Beiträge:
    27
    Minecraft:
    Major_Sauce
    Die for-Schleife überladen ?
    Jedem das eigene, das ist nur das typische Anwendungsgebiet für for-Schleifen.

    Zu deinem Problem:
    Eine java-Methode wird immer mit einem Typ und einem Namen versehen, public und static sind optional, der Typ muss aber vorhanden sein.
    Bei dir kann ich ihn nicht erkennen, es sei denn du hast eine Klasse die sich faktorielle2 nennt, dann fehlt aber noch die Bezeichnung.

    Code (Text):
    1. public static double faktorielle2(double value) {
    2.  
    3. //Inhalt einfügen
    4.  
    5. }
    Sollte funktionieren.
    Ach ja, dein Code im inneren der loop macht überigens im Moment gar nichts.

    mfg Major_Sauce
     
    #13