I try to make the program so that the user can give input of the interger of the Month (e.g when user inputs number 4, The output should be April) and it will keep asking so long the user inputs a valid number (1 - 12). If user inputs an invalid number, the program should say "Invalid!", then terminate. However, my program cannot follow through the while-loop and immediately set the invalid number as an exception. What should I do to make the program says "Invalid!"? Thanks!
String[] months = new String[] {"January", "February", "March", "April", "May", "June", "July", "August", "September", "Oktober", "November", "December"};
Scanner input = new Scanner(System.in);
int i = 1;
while(i < 13 && i > 0)
{
if(i > 12 && i < 1)
{
break;
}
else
{
System.out.println("Month?");
i = input.nextInt();
System.out.println(months[i - 1] + "\n");
}
}
System.out.println("Invalid!");
You can use an infinite loop (i.e. while(true){}
) and break it in case of InputMismatchException
or the input integer out of the valid range (i.e. 1
to 12
).
import java.util.InputMismatchException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String[] months = new String[] { "January", "February", "March", "April", "May", "June", "July", "August",
"September", "Oktober", "November", "December" };
Scanner input = new Scanner(System.in);
int i;
while (true) {
System.out.print("Month?");
try {
i = input.nextInt();
if (i >= 1 && i <= 12) {
System.out.println(months[i - 1]);
} else {
System.out.println("Invalid");
break;
}
} catch (InputMismatchException e) {
System.out.println("Invalid");
break;
}
}
}
}
A sample run:
Month?10
Oktober
Month?1
January
Month?15
Invalid
Another sample run:
Month?12
December
Month?1
January
Month?abc
Invalid
java.time
API:import java.time.DateTimeException;
import java.time.Month;
import java.time.format.TextStyle;
import java.util.InputMismatchException;
import java.util.Locale;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while (true) {
System.out.print("Month?");
try {
Month month = Month.of(input.nextInt());
// Change the locale as per your requirement e.g. Locale.ENGLISH
System.out.println(month.getDisplayName(TextStyle.FULL, Locale.GERMAN));
} catch (DateTimeException | InputMismatchException e) {
System.out.println("Invalid");
break;
}
}
}
}
A sample run:
Month?10
Oktober
Month?1
Januar
Month?15
Invalid
Another sample run:
Month?10
Oktober
Month?1
Januar
Month?Abc
Invalid