Write a Java application that takes in a number of grade scores (decimals allowed), and computes the average of them. Then print out a letter grade corresponding to the average; either A, B, C, D, or F. See examples below.
Use the following grading scale
At least 90: A otherwise at least 80: B otherwise at least 70: C otherwise at least 60: D otherwise: F
This is what the output should look like. How many grades will you be entering? 3 What is the next grade? 91.5 What is the next grade? 90.5 What is the next grade? 90 Here is the average: 90.66666666666667 This is an A.
here is what I have:
public class Grades1 {
public static void main(String[] args) {
double total;
double grade;
double scores;
ConsoleIO.printLine("How many grades will you be entering?");
grade = ConsoleIO.readDouble();
scores = ConsoleIO.readDouble();
while (grade < 1) {
ConsoleIO.printLine("you must enter a grade");
ConsoleIO.readDouble();
}
ConsoleIO.printLine("What is the next grade?");
score = ConsoleIO.readDouble();
total = ()
ConsoleIO.printLine("Your grade is ");
if (total > 90){
ConsoleIO.printLine("A");
}
else if (total > 80) {
ConsoleIO.printLine("B");
}
else if (total > 70) {
ConsoleIO.printLine("C");
}
else if (total > 60) {
ConsoleIO.printLine("D");
}
else {
ConsoleIO.printLine("F");
}
} }
Advertisement
Answer
First, make sure your JVM has any console attached to. System.console();
returns the unique Console
object associatedwith the current Java virtual machine, if any.
System.console()
returns a java.io.Console
, which is the proper way to invoke it since Java5 (more or less..)
So you may be hitting a nullPointer if you execute it on a JVM without console.
That said, this is the code:
public static void main(String args[])
{
double total=0, score=0;
int grades=0;
Console con = System.console();
PrintWriter w = con.writer(); //beware here (NPE)
while (grades < 1)
{
w.println("How many grades will you be entering? Minimum is 1");
String numGrades = con.readLine();
grades = isNumeric(numGrades)?Integer.parseInt(numGrades):-1;
if (grades<0)
w.println("Please enter a valid value. You shithead.");
}
for (int i=0;i<grades;i++)
{
w.println("Enter score for grade nº"+(i+1));
String scoreS = con.readLine();
if (isNumeric(scoreS))
score += Double.parseDouble(scoreS);
else {
w.println("Come on man...not again.. Please enter a numeric value..");
--i;
}
}
total = (score/grades*1D);
char finalG = getFinalGrade(total);
w.printf("Your score average is: %f - Grade : %s", total, finalG);
}
public static boolean isNumeric(final String str)
{
if (str == null || str.length() == 0)
return false;
for (char c : str.toCharArray())
if (!Character.isDigit(c))
return false;
return true;
}
public static char getFinalGrade(double total)
{
if (total >= 90)
return 'A';
if (total >= 80)
return 'B';
if (total >= 70)
return 'C';
if (total >= 60)
return 'D';
return 'F';
}