Anzahl von Zahlen bei eingabe begrenzen

Guten Tag,

ich programmiere momentan einen Schaltjahrrechner.
Die Berechnung des Schaltjahres ist schon geschrieben und funktioniert ohne Probleme.

Mein Problem ist, dass ich mein Programm dazubringen muss nur vierstellige Zahlen akzeptiert;
also die Zahl 8 n. Chr. nur akzeptiert und weiterverarbeitet, wenn man die Zahl als 0008 eingibt.

Mein bisheriger Code sieht so aus:

package schaltjahrrechner;
import java.util.Scanner;
public class Schaltjahrrechner {
public static void main(String[] args) {
try{

Scanner keyboard=new Scanner(System.in);
int Jahr;
System.out.println("Geben Sie eine vierstellige Jahreszahl.");
System.out.println("Please enter a number of a year, the number has to have four digits.");
System.out.println("Bedingung: Die Zahl muss >= 0000 sein");
System.out.println("Condition: The number have to be >= 0000");
System.out.println("Bedingung: Die Zahl muss <= 2100 sein.");
System.out.println("Condition: The number has to be <=2100.");
Jahr=keyboard.nextInt();
if (Jahr<0) {System.out.println("Diese Zahl ist außerhalb des berechenbaren Zahlenraums.");
System.out.println("The number is not computable.");
}
else if (Jahr>=2101) {System.out.println("Diese Zahl ist außerhalb des berechenbaren Zahlenraums. ");
System.out.println("The number is not computalbe.");
}
else if (Jahr % 100 == 0) {System.out.print("Das Jahr " + Jahr + " ist kein ein Schaltjahr");
System.out.println("The year " + Jahr + " is not a leap-year.");
}
else if ((Jahr % 400 == 0)) {System.out.print("Das Jahr " + Jahr + " ist ein Schaltjahr");
System.out.println("The year " + Jahr+ " is a leap-year.");
}
else if (Jahr % 4==0) {System.out.print("Das Jahr " + Jahr + " ist ein Schaltjahr");
System.out.println("The year "+Jahr+ "is a leap-year.");
}
else {System.out.println("Das Jahr " + Jahr + " ist kein Schaltjahr");
System.out.println("The year" +Jahr+ "is not a leap-year.");
}
keyboard.close();
}catch (Exception e) {System.out.println("Bitte geben Sie eine Zahl ein, wie oben beschrieben");
System.out.println("Please enter a number with the conditions above.");
}}

}
Wie kann ich mein Code bearbeiten um eine Begrenzung der Zahlenanzahl auf nur 4 Ziffern zu erreichen. Alo dass mein Programm nur Zahlen akzeptiert, welche 4 Ziffernhat und sonst eine Fehlermeldung ausspuckt.

Vielen Dank und schönen Abend noch,
Der Maschbaustudent
 
Muss ich dafür ein java import.util.String haben?

Wenn ich die
If String Schleife habe muss ich dann die restlichen Vedingungen als else if Schleife Schreiben?

Kann ich dann einfach ans ende ein
else
{System.out.println ("Bitte geben sie eine vierstellige Zahl ein");}

anhängen um meine Schleife kontrolliert abzubrechen bei falscheingabe?
 
Ich meinte meine if Bedingung.

Wie kann ich die String aktivieren?
Und wie kann ichdas Abbrechen als "else" programmieren, sobald die Bedingungen (weniger/mehr als 4 Ziffern) nicht erfüllt wird?
 
Mir ist noch nicht ganz klar was du willst aber einfach so wie es oben schon mal stand:

Code:
if(String.valueOf(Jahr).length() != 4) {
   System.out.println("Sie muessen eine vierstellige Zahl eingeben");
   // und dann geht es hier irgendwie weiter
}
else {
   // es war alles in Ordnung, jetzt geht es hier weiter
}

Und was heisst wie kann ich String aktivieren ? Schreibe es mal in deinem Code einfach an der gewünschten Stelle so hin. Du musst da nix aktivieren
 
Also sozusagen eine verschaltelte if-clause

Berechnung nur wenn Bedingung 1 (Anzahl der Ziffern) und Bedingung 2 (ob Schaltjahr oder nicht) erfüllt sind dann Ausgabe (....ist/ist kein Schaltjahr)

Sobald Bedingung 1 oder 2 nicht erfüllt sind möchte ich einen Abbruch:
"Diese Zahl kann nicht berechnet werden...."
 
"Jahr" ist ja vom Typ int und du liest sie via Scanner und nextInt() ein. Und dann rechnest du damit weiter. Und ich behaupte mal wenn du dort 0008 eingibst ist das Ergebnis das gleiche als wenn du 8 eingibst.
Gib dir doch "Jahr" einfach mal nach dem einlesen wieder aus.
 
Ich halte diese Bedingung zwar für absoluten Schwachsinn aber wenn es sein muss:

Code:
Scanner keyboard=new Scanner(System.in);
int Jahr;
System.out.println("Geben Sie eine vierstellige Jahreszahl.");
System.out.println("Please enter a number of a year, the number has to have four digits.");
System.out.println("Bedingung: Die Zahl muss >= 0000 sein");
System.out.println("Condition: The number have to be >= 0000");
System.out.println("Bedingung: Die Zahl muss <= 2100 sein.");
System.out.println("Condition: The number has to be <=2100.");
String line = keyboard.nextLine();
if (line.length() < 4) {
   // Fehler ausgeben und return
}
else {
  Jahr=line.parseInt();
}
 
Funktioniert damit nicht.

Dem Scanner fehlt durch das "String line=...." die eigentliche Variable Jahr, die er eigentlich als eingabe annehmen soll.
Auch meint Netbeans, dass die else-Anweisung "Jahr=line.parseInt ();" nicht als Symbol oder Methode gefunden werden kann.
 
Danke an alle für die schnelle und super kompetente Hilfe.

Zum Schluss:
@JStein52: zum Thema warum die Nullen davor bleiben müssen, sag ich nur: Wat mut, dat mut. Besser ich kann es jetzt merke es mir und kann es dann in der nächsten Klausur und auch danach weiterhin anwenden. 😉
 
Ich habe nur die System.out.print mit line vergeben.

Die if Bedingung(Jahr....) bleibt witerhin gleich.

Nur hat sich en neues Problem aufgetan.
Trotz der If-bedingung der line.length gibt er auch alles aus, wenn es weniger als vier Ziffern hat.

Den Code stelle ich rein.
 
mein Modulo habe ich verwirklicht durch z. Bsp. if(Jahr%4!=0)........

Das ist mein jetziger Code. Wo liegt mein Fehler? trotz der line.length nimmt das Programm auch eingaben, welche merh oder weniger als 4 Ziffern haben.
Java:
package schaltjahrrechner;
import java.util.Scanner;
public class Schaltjahrrechner {
 public static void main(String[] args) {
  Scanner keyboard = new Scanner(System.in);
  int Jahr;
  System.out.println("Geben Sie eine vierstellige Jahreszahl.");
  System.out.println("Please enter a number of a year, the number has to have four digits.");
  System.out.println("Bedingung: Die Zahl muss >= 0000 sein");
  System.out.println("Condition: The number have to be >= 0000");
  System.out.println("Bedingung: Die Zahl muss <= 2100 sein.");
  System.out.println("Condition: The number has to be <=2100.");
  String line = keyboard.nextLine();
  if ((line.length() < 4) || (line.length() > 4)) {
   System.out.print("Das Jahr " + line + " kann nicht berechnet werden. Sie müssen vier Ziffern eingeben.");
   System.out.println("The year " + line + " is not computable. The number has to have four digits.");
  } else {
   Jahr = Integer.parseInt(line);
   if (Jahr == 0000) {
    System.out.println("Das Jahr 0000 ist ein Schaltjahr");
    System.out.println("The year 0000 is a leap-year.");
   } else if (Jahr < 0) {
    System.out.println("Diese Zahl ist außerhalb des berechenbaren Zahlenraums.");
    System.out.println("The number is not computable.");
   } else if (Jahr >= 2101) {
    System.out.println("Diese Zahl ist außerhalb des berechenbaren Zahlenraums. ");
    System.out.println("The number is not computalbe.");
   } else if (Jahr % 100 == 0) {
    System.out.println("Das Jahr " + line + " ist kein  Schaltjahr");
    System.out.println("The year " + line + " is not a leap-year.");
   } else if ((Jahr % 400 == 0)) {
    System.out.println("Das Jahr " + line + " ist ein Schaltjahr");
    System.out.println("The year " + line + " is a leap-year.");
   } else if (Jahr % 4 == 0) {
    System.out.println("Das Jahr " + line + " ist ein Schaltjahr");
    System.out.println("The year " + line + " is a leap-year.");
   } else if ((Jahr % 4 != 0) && (Jahr % 400 != 0)) {
    System.out.println("Das Jahr " + line + " ist kein Schaltjahr");
    System.out.println("The year " + line + " is not a leap-year.");
   }
  }
 }
}
 
Das ist mein jetziger Code. Wo liegt mein Fehler? trotz der line.length nimmt das Programm auch eingaben, welche merh oder weniger als 4 Ziffern haben.
Kann ich nicht reproduzieren. Beispiel:
Code:
Geben Sie eine vierstellige Jahreszahl.
Please enter a number of a year, the number has to have four digits.
Bedingung: Die Zahl muss >= 0000 sein
Condition: The number have to be >= 0000
Bedingung: Die Zahl muss <= 2100 sein.
Condition: The number has to be <=2100.
150
Das Jahr 150 kann nicht berechnet werden. Sie müssen vier Ziffern eingeben.The year 150 is not computable. The number has to have four digits.
 
Bei mir funktioniert dein Programm

run:
Geben Sie eine vierstellige Jahreszahl.
Please enter a number of a year, the number has to have four digits.
Bedingung: Die Zahl muss >= 0000 sein
Condition: The number have to be >= 0000
Bedingung: Die Zahl muss <= 2100 sein.
Condition: The number has to be <=2100.
12345
Das Jahr 12345 kann nicht berechnet werden. Sie müssen vier Ziffern eingeben.The year 12345 is not computable. The number has to have four digits.

Edit: ein bisschen zu spät 😉😉😉
 
Hatte die if Bedingung der line.length erst als 2 IF Bedingungen stehen. Dadurch hat er nur für die eine If Bedingung die dazugehörige Else-Bedingung ausgeführt.

Jetzt habe ich es aber geschrieben als:

Java:
 if ((line.length <4) || line.length>4))
 

Zurück
Oben