Connor Hale
Connor Hale

Reputation: 3

Using || OR Operator within If Statements alongside characters

I'm very new to programming in general, and I'm having a bit of trouble with a program I'm writing in Java to help calculate my final grade in a class. This part of the program asks me what letter grade I would like to receive, and then determines if that input is valid. For example, if I typed into the keyboard that I wanted to receive a letter grade of "Z", because that is not a valid grade, I would like my program to output "Invalid Input" and exit. The code I have written below is not producing any syntax errors, but it outputs "Invalid Input" for every letter grade I choose, even A, B, and C (inputs that should be valid). Any help in understanding what's wrong is more than welcome.

Scanner input = new Scanner(System.in);

char desiredGrade

System.out.print("What letter grade do you want to achieve for the course? ");
desiredGrade = input.next().charAt(0);
if (desiredGrade != 'A' || desiredGrade != 'B' || desiredGrade != 'C'){
        System.out.println("Invalid Input");
        System.exit(0);
    }

In addition to this, it would be helpful to not have to worry about case sensitivity with the inputs. I know I can use .ignoreCase() or .equalsIgnoreCase() with strings, but I'm not quite sure how to implement that with char.

Upvotes: 0

Views: 61

Answers (4)

Ricardo González
Ricardo González

Reputation: 1433

Lets say desiredGrade = 'A'

if (desiredGrade != 'A' || desiredGrade != 'B' || desiredGrade != 'C'){

The first condition will be false, but the second and third will be true. So

if (false || true || true)

Will result always in true.

The way to do it is using operator AND &&

if (desiredGrade != 'A' && desiredGrade != 'B' && desiredGrade != 'C'){

This way, if the user decides to input 'A' the operation will be

if (false && true && true){

Resulting in false. And if the user inputs 'Z', the operation will be

if (true && true && true){

That will result true and execute the Invalid input output.

EDIT As it has been mentioned. The user may input 'a' (lowercase) for which condition desiredGrade = 'A' will be false since 'a' != 'A' (is not equal).

So it will be wise to convert desiredGrade to uppercase before the if statement.

Upvotes: 1

user unknown
user unknown

Reputation: 36259

Try this:

if (! Arrays.asList ('A', 'B', 'C').contains (Character.toUpperCase (desiredGrade))) {
    // your error handling
}

Upvotes: 0

Michael Seiler
Michael Seiler

Reputation: 650

see this Answer

For Upper- and Lowercase you can wrap your char in Character and then call toLowerCase and check the input and the expected value on Lowercase.

In your example

desiredGrade != 'A' || desiredGrade != 'B' || desiredGrade != 'C'

If you want to use the || operator you have to do it like that

if(!(desiredGrade == 'A' || desiredGrade == 'B' || desiredGrade == 'C')){
}

That way you check if the Input is A, B, or C and if not then exit

Upvotes: 2

gus3001
gus3001

Reputation: 919

Try out

(desiredGrade != 'A' && desiredGrade != 'B' && desiredGrade != 'C')

Basically, you want to check if desiredGrade is different than A and different than B and different than C, print out invalid input.

Upvotes: 1

Related Questions