I am a new programmer and I have this assignment for my class. My question is, if the user input is invalid and the else statement is executed, how can I make the System.out.println("Your Sign is " + sign);
that comes after the else statement not execute, without having to have the System.out.print in every if/else if statement.
So if the user input is invalid, the output should be ONLY BE THIS: "Invalid Entry. Please run the program to try again."
import java.util.Scanner;
public class Sign {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int month, day;
System.out.println("What's your sign?");
System.out.print("Please enter the month of your birth (1-12): ");
month = input.nextInt();
System.out.print("Please enter the day of your birth (1-31): ");
day = input.nextInt();
String sign = "";
if ((month == 3 && (day >= 21 && day <= 31)) || (month == 4 && (day >= 1 && day <= 19))) {
sign = "Aries";
}
else if ((month == 4 && (day >= 20 && day <= 30)) || (month == 5 && (day >= 1 && day <= 20))) {
sign = "Taurus";
}
else if ((month == 5 && (day >= 21 && day <= 31)) || (month == 6 && (day >= 1 && day <= 21))) {
sign = "Gemini";
}
else if ((month == 6 && (day >= 22 && day <= 30)) ||(month == 7 && (day >= 1 && day <= 22))) {
sign = "Cancer";
}
else if ((month == 7 && (day >= 23 && day <= 31)) || (month == 8 && (day >= 1 && day <= 22))) {
sign = "Leo";
}
else if ((month == 8 && (day >= 23 && day <= 31)) || (month == 9 && (day >= 1 && day <= 22))) {
sign = "Virgo";
}
else if ((month == 9 && (day >= 23 && day <= 30)) || (month == 10 && (day >= 1 && day <= 22))) {
sign = "Libra";
}
else if ((month == 10 && (day >= 23 && day <= 31)) || (month == 11 && (day >= 1 && day <= 21))) {
sign = "Scorpio";
}
else if ((month == 11 && (day >= 22 && day <= 30)) || (month == 12 && (day >=1 && day <= 21))) {
sign = "Sagittarius";
}
else if ((month == 12 && (day >= 22 && day <= 31)) || (month == 1 && (day >= 1 && day <= 19))) {
sign="Capricon";
}
else if ((month == 1 && (day >= 20 && day <= 31)) || (month == 2 && (day >= 1 && day <= 18))) {
sign="Aquarius";
}
else if((month == 2 && (day >= 19 && day <= 29)) || (month == 3 && (day >= 1 && day <= 20))) {
sign="Pieces";
}
else {
System.out.println("Invalid Entry. Please run the program to try again.");
}
System.out.println("Your Sign is " + sign);
input.close();
}
}
You can remove your else
clause, and use the value of sign
as an indication of valid input.
String sign = null;
if ((month == 3 && (day >= 21 && day <= 31)) || (month == 4 && (day >= 1 && day <= 19))) {
sign = "Aries";
} else if ...
...
} else if ((month == 2 && (day >= 19 && day <= 29)) || (month == 3 && (day >= 1 && day <= 20))) {
sign="Pieces";
}
if (sign != null) {
System.out.println("Your Sign is " + sign);
} else {
System.out.println("Invalid Entry. Please run the program to try again.");
}
You have to remove your else clause, and check the value of sign is not null or empty like following.
import java.util.Scanner;
public class Sign {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int month, day;
System.out.println("What's your sign?");
System.out.print("Please enter the month of your birth (1-12): ");
month = input.nextInt();
System.out.print("Please enter the day of your birth (1-31): ");
day = input.nextInt();
String sign = "";
if ((month == 3 && (day >= 21 && day <= 31)) || (month == 4 && (day >= 1 && day <= 19))) {
sign = "Aries";
}
else if ((month == 4 && (day >= 20 && day <= 30)) || (month == 5 && (day >= 1 && day <= 20))) {
sign = "Taurus";
}
else if ((month == 5 && (day >= 21 && day <= 31)) || (month == 6 && (day >= 1 && day <= 21))) {
sign = "Gemini";
}
else if ((month == 6 && (day >= 22 && day <= 30)) ||(month == 7 && (day >= 1 && day <= 22))) {
sign = "Cancer";
}
else if ((month == 7 && (day >= 23 && day <= 31)) || (month == 8 && (day >= 1 && day <= 22))) {
sign = "Leo";
}
else if ((month == 8 && (day >= 23 && day <= 31)) || (month == 9 && (day >= 1 && day <= 22))) {
sign = "Virgo";
}
else if ((month == 9 && (day >= 23 && day <= 30)) || (month == 10 && (day >= 1 && day <= 22))) {
sign = "Libra";
}
else if ((month == 10 && (day >= 23 && day <= 31)) || (month == 11 && (day >= 1 && day <= 21))) {
sign = "Scorpio";
}
else if ((month == 11 && (day >= 22 && day <= 30)) || (month == 12 && (day >=1 && day <= 21))) {
sign = "Sagittarius";
}
else if ((month == 12 && (day >= 22 && day <= 31)) || (month == 1 && (day >= 1 && day <= 19))) {
sign="Capricon";
}
else if ((month == 1 && (day >= 20 && day <= 31)) || (month == 2 && (day >= 1 && day <= 18))) {
sign="Aquarius";
}
else if((month == 2 && (day >= 19 && day <= 29)) || (month == 3 && (day >= 1 && day <= 20))) {
sign="Pieces";
}
if(!sign.equals("")){
System.out.println("Your Sign is " + sign);
}else{
System.out.println("Invalid Entry. Please run the program to try again.");
}
input.close();
}
}
将此代码放在try..catch块中,在else块之后执行SOP时似乎是异常。
use try catch. https://beginnersbook.com/2013/04/try-catch-in-java/
Put the code you want to execute in try and catch the exception with an error message.
Just add a check using a variable isEntryValid(i have marked changes to be done with "// Added" comment).
Hope your problem is resolved:
import java.util.Scanner;
public class Sign {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int month, day, isEntryValid = 1 //Added;
System.out.println("What's your sign?");
System.out.print("Please enter the month of your birth (1-12): ");
month = input.nextInt();
System.out.print("Please enter the day of your birth (1-31): ");
day = input.nextInt();
String sign = "";
if ((month == 3 && (day >= 21 && day <= 31)) || (month == 4 && (day >= 1 && day <= 19))) {
sign = "Aries";
}
else if ((month == 4 && (day >= 20 && day <= 30)) || (month == 5 && (day >= 1 && day <= 20))) {
sign = "Taurus";
}
else if ((month == 5 && (day >= 21 && day <= 31)) || (month == 6 && (day >= 1 && day <= 21))) {
sign = "Gemini";
}
else if ((month == 6 && (day >= 22 && day <= 30)) ||(month == 7 && (day >= 1 && day <= 22))) {
sign = "Cancer";
}
else if ((month == 7 && (day >= 23 && day <= 31)) || (month == 8 && (day >= 1 && day <= 22))) {
sign = "Leo";
}
else if ((month == 8 && (day >= 23 && day <= 31)) || (month == 9 && (day >= 1 && day <= 22))) {
sign = "Virgo";
}
else if ((month == 9 && (day >= 23 && day <= 30)) || (month == 10 && (day >= 1 && day <= 22))) {
sign = "Libra";
}
else if ((month == 10 && (day >= 23 && day <= 31)) || (month == 11 && (day >= 1 && day <= 21))) {
sign = "Scorpio";
}
else if ((month == 11 && (day >= 22 && day <= 30)) || (month == 12 && (day >=1 && day <= 21))) {
sign = "Sagittarius";
}
else if ((month == 12 && (day >= 22 && day <= 31)) || (month == 1 && (day >= 1 && day <= 19))) {
sign="Capricon";
}
else if ((month == 1 && (day >= 20 && day <= 31)) || (month == 2 && (day >= 1 && day <= 18))) {
sign="Aquarius";
}
else if((month == 2 && (day >= 19 && day <= 29)) || (month == 3 && (day >= 1 && day <= 20))) {
sign="Pieces";
}
else {
System.out.println("Invalid Entry. Please run the program to try again.");
isEntryValid = 0; //Added
}
if(isEntryValid ){ //Added
System.out.println("Your Sign is " + sign);
}//Added
input.close();
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.