PDA

View Full Version : help with operators


raptrex
02-21-2009, 01:02 AM
so i get this error
Assignment3.java:24: operator <= cannot be applied to boolean,int
else if (80 <= average <= 89)
^
Assignment3.java:26: operator <= cannot be applied to boolean,int
else if (70 <= average <= 79)
^
Assignment3.java:28: operator <= cannot be applied to boolean,int
else if (60 <= average <= 69)
^
3 errors

Im trying to get it to say "your grade is an B" if its between 80 and 89
heres what i have so far:


import javax.swing.JOptionPane;
public class Assignment3
{
public static void main(String []args)
{
String inputString;
double score1, score2, score3, average;

inputString = JOptionPane.showInputDialog("What is your first test score?");
score1 = Double.parseDouble(inputString);

inputString = JOptionPane.showInputDialog("What is your second test score?");
score2 = Double.parseDouble(inputString);

inputString = JOptionPane.showInputDialog("What is your third test score?");
score3 = Double.parseDouble(inputString);

average = (score1 + score2 + score3 ) / 3.0;

JOptionPane.showMessageDialog(null, "Your average test score is " + average);

if (average > 90)
JOptionPane.showMessageDialog(null, "Your grade is a A");
else if (80 <= average <= 89)
JOptionPane.showMessageDialog(null, "Your grade is a B");
else if (70 <= average <= 79)
JOptionPane.showMessageDialog(null, "Your grade is a C");
else if (60 <= average <= 69)
JOptionPane.showMessageDialog(null, "Your grade is a D");
else if (average < 60)
JOptionPane.showMessageDialog(null, "Your grade is a F");

System.exit(0);

}
}

nvm figured it out

if (average < 60)
JOptionPane.showMessageDialog(null, "Your grade is a F");
else if (average < 70)
JOptionPane.showMessageDialog(null, "Your grade is a D");
else if (average < 80)
JOptionPane.showMessageDialog(null, "Your grade is a C");
else if (average < 90)
JOptionPane.showMessageDialog(null, "Your grade is a B");
else if (average > 90)
JOptionPane.showMessageDialog(null, "Your grade is a A");

Fou-Lu
02-21-2009, 07:20 AM
The logic is incorrect (80 <= average <= 89) is the same as:

average = 82;
80 <= average; // Thats true
average <= 89; // Thats also true
(80 <= average <= 89) // attempting to compare the true result of 80 <= average with <= 89

You need to evaluate each case:

if (80 <= average && average <= 89) // If true AND true (which is true)

raptrex
02-21-2009, 08:12 AM
oh i see, thats what i was looking for

Old Pedant
02-22-2009, 12:08 AM
if (average < 60)
JOptionPane.showMessageDialog(null, "Your grade is a F");
else if (average < 70)
JOptionPane.showMessageDialog(null, "Your grade is a D");
else if (average < 80)
JOptionPane.showMessageDialog(null, "Your grade is a C");
else if (average < 90)
JOptionPane.showMessageDialog(null, "Your grade is a B");
else if (average > 90)
JOptionPane.showMessageDialog(null, "Your grade is a A");

Two things wrong with that code:
(1) What happens if the average is *EXACTLY* 90???

(2) Why code JOptionPane.showMessageDialog(null, "Your grade is a each and every time???

I would suggest, instead:

String grade = "an A";
if (average < 60)
grade = "an F";
else if (average < 70)
grade = "a D";
else if (average < 80)
grade = "a C";
else if (average < 90)
grade = "a B";
// don't need to test for A! We assumed that!
JOptionPane.showMessageDialog(null, "Your grade is " + grade);


And, yes, this is much more efficient than Fou-lu's solution. His works; yours avoids making the unnecessary "second" tests on each range.