2015-07-06 5 views
0

Я делаю для себя небольшую программу, которая рассчитает мою среднюю оценку.Расчет средней оценки

Сейчас у меня есть полностью работающая программа, но она очень неэффективна и очень ограничена. Код:

import java.util.Scanner; 
public class GradeCalculator { 

public static void main(String[] args) { 

Scanner count = new Scanner(System.in); 
    int counter = count.nextInt(); 

     Scanner input = new Scanner(System.in); 

    double mark = input.nextDouble(); 
    double promark = (mark/100); 
    double weight = input.nextDouble(); 
    double total = (promark*weight); 
    double finalmark = (total); 
    if (counter==1){ 
    System.out.println("The average mark for your "+counter+" assignments/exams is "+finalmark); 
    System.exit(0); 
    } 

    double mark1 = input.nextDouble(); 
    double promark1 = (mark1/100); 
    double weight1 =input.nextDouble(); 
    double total1 = (promark1*weight1); 
    double finalmark1 = (total+total1); 
    if (counter==2){ 
    System.out.println("The average mark for your "+counter+" assignments/exams is "+finalmark1); 
    System.exit(0); 
    } 

    double mark2 = input.nextDouble(); 
    double promark2 = (mark2/100); 
    double weight2 =input.nextDouble(); 
    double total2 = (promark2*weight2); 
    double finalmark2 = (total+total1+total2); 
    if (counter==3){ 
    System.out.println("The average mark for your "+counter+" assignments/exams is "+finalmark2); 
    System.exit(0); 
    } 


    double mark3 = input.nextDouble(); 
    double promark3 = (mark3/100); 
    double weight3 =input.nextDouble(); 
    double total3 = (promark3*weight3); 
    double finalmark3 = (total+total1+total2+total3); 
    if (counter==4){ 
    System.out.println("The average mark for your "+counter+" assignments/exams is "+finalmark3); 
    System.exit(0); 
    } 

    double mark4 = input.nextDouble(); 
    double promark4 = (mark4/100); 
    double weight4 = input.nextDouble(); 
    double total4 = (promark4*weight4); 
    double finalmark4 = (total+total1+total2+total3+total4); 
    if(counter==5){ 
    System.out.println("The average mark for your "+counter+" assignments/exams is "+finalmark4); 
    System.exit(0); 
    } 

Таким образом, эта программа сначала запрашивает у пользователя количество различных марок, которые у них есть.

Затем после того, как пользователь поставит отметку и взвешенный процент от этой работы.

После этого программа рассчитает среднюю отметку всех отметок с учетом процента каждого знака.

Программа в основном точная копия этого сайта:

http://www.benegg.net/grade_calculator.html

Есть так много если петли/переменные. Как я могу использовать ООП в Java, чтобы разобраться в этом? Например, используя методы/конструкторы и т. Д.?

+2

Этот вопрос может быть лучше подходит для codereview.SE – gla3dr

+0

@ gla3dr hmm .. да похоже. flagged – Vogel612

+0

@ gla3dr не знал, что есть такой веб-сайт. Спасибо – bob9123

ответ

1

Вы можете создать класс Exam в качестве заполнителя для вашего ввода данных:

public static class Exam { 
    final double mark; 
    final double weight; 

    public Exam(double mark, double weight) { 
    this.mark = mark; 
    this.weight = weight; 
    } 

    public double getTotal() { 
    return mark * weight/100; 
    } 

    public static double getAverage(Exam[] arr) { 
    double sum = 0; 
    for (int i=0; i < arr.length; i++) sum += arr[i].getTotal(); 
    return sum/arr.length; 
    } 

} 

Теперь вы можете использовать цикл для создания массива Exam данных:

public static void main(String[] args) { 

    Scanner input = new Scanner(System.in); 
    int counter = input.nextInt(); 
    Exam[] arr = new Exam[counter]; 

    for (int i = 0 ; i < counter ; i++) { 
    double mark = input.nextDouble(); 
    double weight = input.nextDouble(); 
    arr[i] = new Exam(mark, weight); 
    } 
    System.out.println("The average mark for your "+counter+" assignments/exams is "+ Exam.getAverage(arr)); 
} 

Надеется, что она выглядит более Лик e ООП-код.

+0

Это именно то, чего я хотел, чтобы я мог больше изучить Java. Большое спасибо. Если у меня возникнут вопросы, я отвечу вам – bob9123

+0

Рад, что я мог бы помочь. Примите, пожалуйста, ответ. – MaxZoom

+0

В чем причина того, что марка и вес окончательны и класс экзамена статичен? Я знаю, какое окончательное и статическое среднее индивидуально, но я не вижу, как они применяются в этом случае. – bob9123

3

Вы должны использовать цикл:

int sumTotal=0; 
int sumWeight=0; 
for(int i=0;i<counter;i++){ 
    double mark = input.nextDouble(); 
    double promark = (mark/100); 
    double weight = input.nextDouble(); 
    sumWeight+=weight; //add to sum of weight 
    sumTotal+=promark*weight; //add to sum of total 
} 
System.out.println("Mark is: "+(double)sumTotal/sumWeight); 

Не тестировался, просто так, как вы должны использовать

0

Поскольку это очень конкретное приложение, я не буду переписывать его для вас, но я дам вам некоторые общие советы о том, как уменьшить повторяющийся код.

Что вы действительно хотите сделать, это сделать все повторные вычисления markX, promarkX, weightX и totalX в цикле. После этого вы хотите добавить общее значение к переменной вне цикла for (finalmark). Как только петля выйдет, вы сможете распечатать свое заявление.

0

Поскольку вы используете цифровой счетчик, чтобы отслеживать, сколько раз вы хотите, чтобы цикл, вы должны использовать for loop

Смежные вопросы