简体   繁体   中英

Need help simplifying a method in my code

How can i fix determineGrade(); so that after entering every new Int input it gives you a grade. I could just repeat res1 for res2 and res3 but isnt there a simplier way?

import java.util.Scanner;

public class Answer3 {

    static int avg;

    static int res1;

    static int res2;

    static int res3;

    static Scanner inPut = new Scanner(System.in);


    public static void main(String[] args) {


        calcAverage();

    }

    static void calcAverage()
    {

        System.out.println("Please input exam 1 results");
        res1 = inPut.nextInt();
        determineGrade();
        System.out.println("Please input exam 2 results");
        res2 = inPut.nextInt();
        determineGrade();
        System.out.println("Please input exam 3 results");
        res3 = inPut.nextInt();
        determineGrade();
        avg = (res1 + res2 + res3) / 3;

        System.out.println("The average of these exam results are " + avg);
    }

    static void determineGrade()
    {
        String grade = null;

        if ( res1 > 84 && res1 <101  )
        {
            grade = "HD";
        }
        else if ( res1 > 74 && res1 <85 )
        {
            grade = "D";
        }
        else if ( res1 > 64 && res1 < 75 )
        {
            grade = "C";
        }
        else if ( res1 > 49 && res1 < 65 )
        {
            grade = "P";
        }
        else if ( res1 < 50 )
        {
            grade = "F";
        }

        System.out.println("Your grade is " + grade);
    }

}

Instead of making res1 a static field, pass the result (and the exam number) to the method. Something like,

static void determineGrade(int exam, int res)
{
    String grade = null;
    if ( res > 84 && res <101  )
    {
        grade = "HD";
    }
    else if ( res > 74 && res <85 )
    {
        grade = "D";
    }
    else if ( res > 64 && res < 75 )
    {
        grade = "C";
    }
    else if ( res > 49 && res < 65 )
    {
        grade = "P";
    }
    else if ( res < 50 )
    {
        grade = "F";
    }
    System.out.printf("Your grade for exam %d is %s%n", exam, grade);
}

Then you can call it with each result (and exam number). Like

determineGrade(1, res1);
determineGrade(2, res2);
determineGrade(3, res3);

You can try with below solution.

determineGrade will return the grade - you limit printing results just for the main method. Also resCount makes your program more dynamic and easier to extend.

public class Answer3 {

    static int resCount = 3;
    static Scanner inPut = new Scanner(System.in);

    public static void main(String[] args) {
        calcAverage();
    }

    static void calcAverage() {
        int sum = 0;

        for (int i = 0; i < resCount; i++) {
          System.out.println("Please input exam " + i + " results");

          int res = inPut.nextInt();
          sum += res;

          String grade = determineGrade(res);
          System.out.println("Your grade is " + grade);
        }

        double avg = sum / resCount;
        System.out.println("The average of these exam results are " + avg));
    }

    static String determineGrade(int res) {
        if ( res > 84 && res <101 ) {
            return "HD";
        } else if ( res > 74 && res <85 ) {
            return "D";
        } else if ( res > 64 && res < 75 ) {
            return "C";
        } else if ( res > 49 && res < 65 ) {
            return "P";
        } else {
            return "F";
        }
    }

}

I am not sure if I understood you correctly, but here is my solution:

 static void calcAverage()
{

    System.out.println("Please input exam 1 results");
    res1 = inPut.nextInt();
    determineGrade(res1);
    System.out.println("Please input exam 2 results");
    res2 = inPut.nextInt();
    determineGrade(res2);
    System.out.println("Please input exam 3 results");
    res3 = inPut.nextInt();
    determineGrade(res3);
    avg = (res1 + res2 + res3) / 3;

    System.out.println("The average of these exam results are " + avg);
}

static void determineGrade(int res1)
{
    String grade = null;

    if ( res1 > 84 && res1 <101  )
    {
        grade = "HD";
    }
    else if ( res1 > 74 && res1 <85 )
    {
        grade = "D";
    }
    else if ( res1 > 64 && res1 < 75 )
    {
        grade = "C";
    }
    else if ( res1 > 49 && res1 < 65 )
    {
        grade = "P";
    }
    else if ( res1 < 50 )
    {
        grade = "F";
    }

    System.out.println("Your grade is " + grade);
}
static String determineGrade() 
{ 
    if (res1 > 100) {
        return null;
    }
    else if (res1 < 50) {
        return "F";
    }
    else if (res1 < 65 )
    { 
        return "P";
    } 
    else if (res1 < 75 )
    { 
        return "C";
    }
    else if (res1 <85 )
    { 
        return "D";
    } 
    else 
    { 
        return "HD";
    } 
} 

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