2013-09-12 2 views
0

У меня этот код в моем основном классе. Моя проблема заключается в том, когда GPA рассчитывается с суммарным делением на классы. Это не дает мне полного номера. EX, если общее число равно 14, а классы - 4, это 3.5, мой код дает мне только 3.0. Кто-нибудь знает, почему, я очень ценю вашу помощь!Java GPA калькулятор

Scanner input = new Scanner(System.in); 
    System.out.print("How many classes did you have?: "); 
    int classes = input.nextInt(); 
    String grades = ""; 
    int total = 0; 
    int dec; 



    for (int j = 0; j < classes; j++) { 

     Scanner inputters = new Scanner(System.in); 
     System.out.print("What is your Grade?: "); 
     grades = inputters.nextLine(); 


     if (grades.equals("A")){ 
     dec = 4; 
     total += dec; 

    } else if (grades.equals("B")){ 
     dec = 3; 
     total += dec; 

    } else if (grades.equals("C")){ 
     dec = 2; 
     total += dec; 

    } else if (grades.equals("D")){ 
     dec = 1; 
     total += dec; 

    } else if (grades.equals("F")){ 
     dec = 0; 
     total += dec; 

    } 

    } 


    double GPA = total/classes; 
    System.out.println(GPA); 

    DecimalFormat formatter = new DecimalFormat("0.##"); 
    System.out.println(formatter.format(GPA)); 

ответ

1

Это потому, что вы делите int на int, что никогда не приведет к числу с плавающей запятой. Измените тип total/classes, чтобы удвоить (или применить их), и GPA будет числом, которое вы ожидаете.

PS: Не то, чтобы удвоения на самом деле не были точными, например, 0,9 + 0,1! = 1,0. Если вы хотите выполнить «правильные» двойные вычисления, используйте BigDecimal и используйте конструкторы String при их использовании.

+0

Я не думаю, что использование BigDecimal подходит для чего-то, что будет содержать положительное значение менее 4 ... –

+0

Благодарим за помощь! Не могу поверить, что я не поймал эту ошибку. Время для кровати, ха-ха. – user2673161

+0

Я знаю, что это старый, но @ s.ts вы бы хотели объяснить, почему? –

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