简体   繁体   中英

In case of invalid user input h

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM