Vergleich mit If-Abfrage nur für Zahlen bis 07 möglich - Warum?

Hallo,

ich möchte ein Programm schreiben, welches mir zu einem Datum den gewünschten Wochentag ausgibt.
Das Programm habe ich soweit fertig, doch ich würde meine Abfrage für die Monate gerne in der Form 01,02,03,04,... für die Monate Januar, Februar, März aus der Konsole auslesen.

Immoment gebe ich nur eine Zahl ein, z.B 1 für Januar, 2 für Februar usw.

Jedoch bekomme ich bei meiner Überprüfung in der If-Schleife ab der Zahl 08 diese Meldung:
"The literal 08 of type int is out of range."

Könnte mir jemand erklären, wiso das so ist, und wenn möglich, eine Lösung geben, wie ich es machen könnte?

Hier der betreffende Ausschnitt:

Java:
public static void main(String[] args) {
// TODO Auto-generated method stub
        
        
        int a1 = Eingabe.readInt("Bitte geben Sie die Tagesziffer Ihres Datums ein:");
        int a2 = Eingabe.readInt("Bitte geben Sie die Monatsziffer Ihres Datums ein:");
        int a3 = Eingabe.readInt("Bitte geben Sie die 2 Jahrhunderziffern (z.B 19 bei 1900) Ihres Datums ein:");
        int a4 = Eingabe.readInt("Bitte geben Sie die 2 Jahresziffern Ihres Datums ein:");
        
        System.out.println("--------------------------------------");
        System.out.println("Ihr eingegebenes Datum lautet: " + a1 + "." + a2 + "." + a3 + a4);
        System.out.println();
        System.out.println("Der gesuchte Tag lautet:" + "\n");
        System.out.println("***************");
        
        int erg2=0;
        
        //Berechnung Tagesziffer
        
        int erg1 = a1 % 7;
        
        
        //Berechnung Monatsziffer
        
        if(a2==1)
        {
            int b1 = 0;
            erg2 = b1;
        }
        
        if(a2==2)
        {
            int b2 = 3;
            erg2 = b2;
        }
        
        if(a2==3)
        {
            int b3 = 3;
            erg2 = b3;
        }
        
        if(a2==4)
        {
            int b4 = 6;
            erg2 = b4;
        }
        
        if(a2==5)
        {
            int b5 = 1;
            erg2 = b5;
        }
        
        if(a2==6)
        {
            int b6 = 4;
            erg2 = b6;
        }
        
        if(a2==7)
        {
            int b7 = 6;
            erg2 = b7;
        }
        
        if(a2==8)
        {
            int b8 = 2;
            erg2 = b8;
        }
        
        if(a2==9)
        {
            int b9 = 5;
            erg2 = b9;
        }
        
        if(a2==10)
        {
            int b10 = 0;
            erg2 =b10;
        }
        
        if(a2==11)
        {
            int b11 = 3;
            erg2 = b11;
        }
        
        if(a2==12)
        {
            int b12 = 5;
            erg2 = b12;
        }
 
Zuletzt bearbeitet:
Hallo,

um die ursprüngliche Frage zu beantworten:

Die Monate "10" bis "12" werden (da sie mit einer "1" beginnen) als Dezimalzahlen interpretiert und alles ist gut.
Die Monate "01" bis "07" werden (da sie mit einer "0" beginnen) als Oktalzahlen interpretiert - diese Oktalzahlen haben aber den gleichen Wert wie die entsprechenden Dezimalzahlen und auch hier ist alles gut.
Die Monate "08" und "09" werden ebenfalls als Oktalzahlen interpretiert - "8" und "9" sind jedoch hier nicht erlaubt und es gibt eine Fehlermeldung.

Gruß
Fritz
 
Ich würde die Eingabe als String einlesen und dann nach int parsen.
Und die ganzen b1, b2, etc. werden deklariert und dann nicht mehr gebraucht, also kannste die auch gleich weglassen.
z.B.
int b12 = 5;
erg2 = b12;

-> erg2 = 5;
 

Zurück
Oben