2015-10-24 3 views
0

Как я могу исправить defineGrade(); так что после ввода каждого нового входа Int он дает вам оценку. Я мог бы просто повторить res1 для res2 и res3, но разве нет более простого способа?Нужна помощь в упрощении метода в моем коде

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); 
    } 

} 
+3

Подсказка: читать на методе * параметры * и возвращаемых значений, так что вы можете позвонить 'String grade1 = defineGrade (res1); String grade2 = defineGrade (res2); 'etc –

+0

Я бы предложил инструкцию« case »в вашей функции' defineGrade'. –

+1

@AlvinBunk Я предполагаю, что вы имеете в виду оператор switch. Но оператор switch не может сравнивать значение с диапазонами, только с константами. И переход через провал является постоянным источником ошибок в любом случае. –

ответ

0

Вы можете использовать нижеуказанное решение.

determineGrade вернет оценку - вы ограничиваете результаты печати только для основного метода. Также resCount делает вашу программу более динамичной и удобной в использовании.

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"; 
     } 
    } 

} 
+0

Спасибо, что легко понять, что вы сделали. Помогли мне много! благодаря –

0

Вместо того, чтобы res1 статическое поле, передать результат (и номер экзамена) к методу. Что-то вроде,

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); 
} 

Затем вы можете позвонить ему с каждым результатом (и номером экзамена). Как

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

Я не уверен, если я правильно понял вас, но вот мое решение:

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); 
} 
0
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"; 
    } 
} 
Смежные вопросы