2016-04-05 3 views
1

Мои итоги не будут обновляться. Каждый раз, когда я запускаю код, gpa отображает 0.0. Я добавил «gp», чтобы узнать, будет ли «очки баллов обновляться при вводе информации о пользователе, но это не будет». Любая помощь была бы замечательной! Я рассмотрел другие проблемы и не мог решить свою проблему!Вопрос Java CALC Java

import javax.swing.JOptionPane; 

public class GUITestClient { 
    public static void main(String[] args) { 

     StudentInfo student = new StudentInfo(); 
     double credits; 
     String name = JOptionPane.showInputDialog("Please enter your name:"); 
     student.setName(name); 
     credits = Double.parseDouble(JOptionPane.showInputDialog("Please enter the credits:")); 
     student.setCredits(credits); 

     String grade = JOptionPane.showInputDialog("Please enter your grade:"); 
     student.setGrade(grade); 

     JOptionPane.showMessageDialog(null, student.displayStudentInformation());   
    } 
} 

public class StudentInfo { 
     private String name; 
     private double totalGradePoints; 
     private double credits; 
     private String grade; 
     private double gpa; 

     public StudentInfo(){ 
      setGrade(null); 
      setCredits(0); 
      setGradePoints(0); 
     } 
     public StudentInfo(double credits, double totalGradePoints, String grade){ 
      setGrade(grade); 
      setCredits(credits); 
      setGradePoints(totalGradePoints); 
     } 

     public String getName() { 
      return name; 
     } 
     public void setName(String name) { 
      this.name = name; 
     } 

     public String getGrade() { 
      return grade; 
     } 
     public void setGrade(String grade) { 
      this.grade = grade; 
     } 
     public double getCredits() { 
      return credits; 
     } 
     public void setCredits(double credits) { 
      this.credits = credits; 
     } 

     public double getGradePoints() { 
      return totalGradePoints; 
     } 
     public void setGradePoints(double totalGradePoints) { 
      this.totalGradePoints = totalGradePoints; 
     } 

     public double getGpa() { 
      return gpa; 
     } 
     public void setGpa(double gpa) { 
      this.gpa = gpa; 
     } 

     public double addClass(double totalGradePoints, String grade){ 
     double gradePoints = 0; 
     if(grade.equals("A")){ 
      gradePoints = 4.0; 
     }else if(grade.equals("B")){ 
      gradePoints = 3.0; 
     } else if(grade.equals("C")){ 
      gradePoints = 2.0; 
     } else if(grade.equals("D")){ 
      gradePoints = 1.0;} 
     totalGradePoints = (totalGradePoints +gradePoints); 

     return getGradePoints(); 
     } 

     public double getGPA(){ 
      this.setGpa(this.getCredits()/this.getGradePoints()); 
      return this.getGpa(); 
     } 

     public String displayStudentInformation(){ 
      String output = ""; 

      output = output + "Name: " + this.getName() + "\n"; 
      output = output + "Total Credits: " + this.getCredits() + "\n"; 
      output = output + "Your grade is: " + this.getGrade() + "\n"; 
      output = output + "Your GPA is: " + this.getGpa() + "\n"; 
      output = output + "Press any key to continue!" + "\n"; 
      output = output + "gp" + totalGradePoints + "\n"; 

      return output; 
     } 
} 

ответ

0

Проблема с вашим this.getGradePoints(). он не является получателем значения, и вы не устанавливаете значение внутри функции для того же экземпляра объекта вашего ученика из StudentInfo student = new StudentInfo(); Вы должны установить все свои переменные сеттера на созданном вами объекте «ученик».

Попробуйте это:

package guitestclient; 

import javax.swing.JOptionPane; 

public class GUITestClient { 
    public static void main(String[] args) { 

     StudentInfo student = new StudentInfo(); 
     double credits; 
     double gradePoints = 0; 
     double gradePointsTot = 0; 
     double gpa = 0; 
     int classCount = 0; 


     String name = JOptionPane.showInputDialog("Please enter your name:"); 
     student.setName(name); 
     do{ 
     credits = Double.parseDouble(JOptionPane.showInputDialog("Please enter the credits:")); 
     student.setCredits(credits); 

     String grade = JOptionPane.showInputDialog("Please enter your grade:"); 
     student.setGrade(grade); 

     //calculates gpa value for grade 
     gradePoints = StudentInfo.addClass(gradePoints, grade); 
     gradePointsTot += gradePoints; 
     classCount++; 
    } while (classCount < 5);  

     //after loop 
     student.setGradePoints(gradePointsTot); 
     gpa = StudentInfo.getGPA(credits, gpa, classCount); 
     student.setGpa(gpa); 


     JOptionPane.showMessageDialog(null, student.displayStudentInformation());   
    } 
} 

class StudentInfo { 
     private String name; 
     private double totalGradePoints; 
     private double credits; 
     private String grade; 
     private double gpa; 

     public StudentInfo(){ 
      setGrade(null); 
      setCredits(0); 
      setGradePoints(0); 
     } 
     public StudentInfo(double credits, double totalGradePoints, String grade){ 
      setGrade(grade); 
      setCredits(credits); 
      setGradePoints(totalGradePoints); 
     } 

     public String getName() { 
      return name; 
     } 
     public void setName(String name) { 
      this.name = name; 
     } 

     public String getGrade() { 
      return grade; 
     } 
     public void setGrade(String grade) { 
      this.grade = grade; 
     } 
     public double getCredits() { 
      return credits; 
     } 
     public void setCredits(double credits) { 
      this.credits = credits; 
     } 

     public double getGradePoints() { 
      return totalGradePoints; 
     } 
     public void setGradePoints(double totalGradePoints) { 
      this.totalGradePoints = totalGradePoints; 
     } 

     public double getGpa() { 
      return gpa; 
     } 
     public void setGpa(double gpa) { 
      this.gpa = gpa; 
     } 

     public static double addClass(double totalGradePoints, String grade){ 
     double gradePoints = 0; 
     if(grade.equals("A")){ 
      gradePoints = 4.0; 
     }else if(grade.equals("B")){ 
      gradePoints = 3.0; 
     } else if(grade.equals("C")){ 
      gradePoints = 2.0; 
     } else if(grade.equals("D")){ 
      gradePoints = 1.0;} 
     totalGradePoints = (totalGradePoints +gradePoints); 

     return totalGradePoints; 
     } 

     public static double getGPA(double totalGradePoints, double credits, double gpa){ 
      gpa = (credits * totalGradePoints)/ credits; 
      return gpa; 
     } 


     public String displayStudentInformation(){ 
      String output = ""; 

      output = output + "Name: " + this.getName() + "\n"; 
      output = output + "Total Credits: " + this.getCredits() + "\n"; 
      output = output + "Your grade is: " + this.getGrade() + "\n"; 
      output = output + "Your GPA is: " + this.getGpa() + "\n"; 
      output = output + "Press any key to continue!" + "\n"; 
      output = output + "gp" + this.getGradePoints() + "\n"; 

      return output;z 
     } 
} 
+0

Не только я хочу обнять тебя прямо сейчас, я хочу начать работать, вскочить, обернуть ноги вокруг тебя и обнять тебя, пока не станет странно. – bobTafft

+0

haha ​​рад, что я мог бы помочь, если это ответили на ваш вопрос, пожалуйста, отметьте его как принято! :) –

+0

это было не на 100% правильно, но оно достало меня там, где мне нужно. Вот единственная коррекция: public static double getGPA (double totalGradePoints, double credits, double gpa) { gpa = (кредиты * totalGradePoints)/кредиты; return gpa; } – bobTafft

-1

В вашем методе addClass, у вас есть totalGradePoints в качестве локальной переменной.

public double addClass(double totalGradePoints, String grade) 

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

public double addClass(String grade) 

Но я не вижу нигде, что вы вызываете метод addClass.

+0

да, это будет петелька для нескольких записей класса/класса, но я хотел, чтобы убедиться, что я мог бы получить один вниз первым. Я выполнил ваши инструкции, и они все равно не будут обновляться в соответствии с пользовательскими вводами. – bobTafft

0
public double addClass(double totalGradePoints, String grade){ 
    double gradePoints = 0; 
    if(grade.equals("A")){ 
     gradePoints = 4.0; 
    }else if(grade.equals("B")){ 
     gradePoints = 3.0; 
    } else if(grade.equals("C")){ 
     gradePoints = 2.0; 
    } else if(grade.equals("D")){ 
     gradePoints = 1.0;} 

    totalGradePoints = (totalGradePoints +gradePoints); 
} 

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

Подпись метода не нуждается в параметре totalGradePoints. Он должен быть

public double addClass(String grade) { 
    ... 

и вам нужно добавить локальный gradePoints к переменной-члена класса totalGradePoints.

+0

Я не уверен, что я пойму, как это будет выглядеть? Получить/установить для «баллов»? – bobTafft