Konkrete Hilfe gesucht - Anzahl der Stellen einer eingegebenen Zahl überprüfen

yoshox

Mitglied
Hallo zusammen,
ich bin neu hier und blutiger Anfänger, so viel schon mal vorweg. Momentan sitze ich an einem Übungsblatt von der Uni und komme einfach nicht mehr weiter. Daher hatte ich auf explizite Hilfe hier gehofft, denn auch google hat mir nur bedingt weiterhelfen können.
Es geht bei der Aufgabe darum, ein Programm zu schreiben, das überprüft ob eine eingegebene Zahl eine gültige Matrikelnummer ist oder nicht. Dazu gibt es die Kriterien, dass natürliche alle Stellen Zahlen sein müssen, die ersten beiden Stellen dürfen nur 50xxxxx, 51xxxxx oder 61xxxxx sein und außerdem muss die eingegebene Zahl siebenstellig sein. Da fängt auch schon mein Problem an. Ich zeige euch am Besten mal was ich bisher gebastelt hab, ich weiß, es ist nicht zwingend schön und das geht bestimmt auch einfacher, aber wie gesagt, ich bin blutiger Anfänger 😳

Code:
import java.util.Scanner;

public class Matrikelnummer {

  public static void main (String[] args) {
 
     Scanner scanner = new Scanner (System.in);
     System.out.print("Bitte geben Sie Ihre Matrikelnummer ein: ");
     String matrikelnummer = scanner.nextLine();
    
        char a = matrikelnummer.charAt(0);
        char b = matrikelnummer.charAt(1);
        char c = matrikelnummer.charAt(2);
        char d = matrikelnummer.charAt(3);
        char e = matrikelnummer.charAt(4);
        char f = matrikelnummer.charAt(5);
        char g = matrikelnummer.charAt(6);
       
        int length = matrikelnummer.length();

        boolean ziffern = ((c<='9') && (c>='0') && (d<='9') && (d>='0') && (e<='9') && (e>='0') && (f<='9') && (f>='0') && (g<='9') && (g>='0'));
        boolean erstekombi =  ((a=='5') && (b=='0') || (a=='5') && (b=='1'));
        boolean zweitekombi = ((a=='6') && (b=='1'));

       
      
        if (ziffern && (erstekombi || zweitekombi) && (length=='7'))
        { System.out.println("Die Matrikelnummer ist gültig!");}
        else
        {
        System.out.println("Die Matrikelnummer ist ungültig!");
        }
       
  }
}

Mein Problem ist, dass ich mit length zwar die Länge der eingegebenen Ziffer ausgeben kann (hab das schon überprüft), aber bei meiner if-Bedingung hat das keinen Effekt. Also sobald ich das length-Kriterium dazunehme, kommt bei gültiger Matrikelnummer trotzdem die Meldung, sie sei ungültig 😵 Und das zweite Problem: sobald ich einen Buchstaben oder eine kürzere Zahl eingebe, also nur vierstellig, kommt eine Fehlermeldung mit String Index out of range 🙁

Vielleicht gibt es ja jemanden, der mir auf die Sprünge helfen kann? Wäre sehr dankbar für Hilfe!
 
Der Fehler liegt in folgender Anweisung:
Java:
...(length == '7')...

Richtig wäre
Java:
...(length == 7)...
 
Oh ja super, vielen Dank 🙂
Jetzt habe ich nur noch das Problem mit einer zu kurzen, eingegebenen Zahl 🙁
Kann ich das irgendwie umgehen oder ist da mein Programm schlichtweg nicht gut genug bzw muss ich mir an manchen Stellen eine andere Lösung suchen?
 
Eine andere Lösung musst du nicht nehmen. Du könntest auch auf die Länge prüfen, bevor du auf die einzelnen chars zugreifst.
 
(c<='9') && (c>='0')
Du könntest auch die Methode verwenden:
https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html#isDigit-char-

Also
Java:
boolean ziffern = Character.isDigit(c) && Character.isDigit(d) && Character.isDigit(e) && Character.isDigit(f) && Character.isDigit(f) && Character.isDigit(g);

Aber mich stellt sich die Frage wieso du a-g verwendest und nicht
https://docs.oracle.com/javase/9/docs/api/java/lang/String.html#toCharArray--
und dann einfach auf die Array-Elemente zugreifst?

Noch viel kürzer würde das übrigens mit
https://docs.oracle.com/javase/9/docs/api/java/lang/String.html#matches-java.lang.String-
gehen

Versteh mich nicht falsch, dein Code funktioniert bestimmt nun, aber er kommt mir extrem umständlich vor :X
 

Neue Themen


Zurück
Oben