1

わかりましたので、これは宿題に関連する質問です。

質問: arrayList 内のオブジェクトのコース名が異なるのはなぜですか (本来あるべきように)、すべてのレターグレードは、arrayList に最後に追加されたコースと同じです (addCourse メソッドのときにパラメーターとして渡されたグレードである必要があります)。と呼ばれていました)?

皆さんが提供できる助けは非常に役に立ちます。なぜ私が自分のやり方で物事を書いたのかについて他に質問がある場合は、お気軽に尋ねてください. この場所は叡智の泉のようなもので、私はできる限りのことを学ぶためにここにいます。

一部のメソッドが完了していないことはわかっていますが、このarrayListの問題を修正する方法を理解するまで、実際には完了できません:)

私の出力は次のようになります。

Student ID: 11234
Student Name: Cody

[
Course: COP2013
Letter Grade: A
GPA in course: 3.67, 
Course: COP2014
Letter Grade: A
GPA in course: 3.67, 
Course: COP2015
Letter Grade: A
GPA in course: 3.67, 
Course: COP2016
Letter Grade: A
GPA in course: 3.67, 
Course: COP2017
Letter Grade: A
GPA in course: 3.67]

Course.java:

 import java.lang.String.*;

public class Course {

//global variables
private String courseID;
private static String letterGrade;
private static Double numberGrade;

//CONSTRUCTORS
//param
public Course(String id, String letter){
courseID = id;
letterGrade=letter;
compute(letter);
}
//default
public Course(){
    courseID = "COP2053";
    numberGrade = 4.0;
    letterGrade = "A";
    compute(getLetterGrade());
}


//COMPUTING GRADES AND UPDATING
private static Double compute(String letter){
    Double a = 0.0;

    if(letter == "A+"){a = 4.0;}
    else if(letter == "A"){a = 3.67;}
    else if(letter == "A-"){a = 3.33;}
    else if(letter == "B+"){a = 3.00;}
    else if(letter == "B"){a = 2.67;}
    else if(letter == "B-"){a = 2.33;}
    else if(letter == "C+"){a = 2.00;}
    else if(letter == "C"){a = 1.67;}
    else if(letter == "C-"){a = 1.33;}
    else if(letter == "D+"){a = 1.0;}
    else if(letter == "D"){a = .67;}
    else if(letter == "D-"){a = .33;}
    else if(letter == "F"){a = 0.0;}


    return a;

}

public static void updateGrade(String newGrade){
    letterGrade=newGrade;
    numberGrade=compute(newGrade);
}

@Override
public String toString(){
    String a = "\nCourse: "+getCourseID()+"\nLetter Grade: "+getLetterGrade()
            +"\nGPA in course: "+compute(getLetterGrade());
    return a;
}




//GETTERS
public String getCourseID(){
    return courseID;
}

public String getLetterGrade(){
    return letterGrade;
}

public Double getNumberGrade(){
    return numberGrade;
}



}

Transcript.java:

import java.util.ArrayList;


public class Transcript {

private ArrayList<Course> classesTaken = new ArrayList<Course>();

public Transcript(String studentID, String studentName){
 System.out.println("\nStudent ID: "+studentID+"\nStudent Name: "+studentName);
}

public void addCourse(String courseID, String letterGrade){
    Course myCourse = new Course(courseID,letterGrade);
    classesTaken.add(myCourse);
}

public void updateCourse(String courseID, String newLetterGrade){

    for(int i=0; i<classesTaken.size(); i++){

        if(classesTaken.contains(courseID)){
        Course.updateGrade(newLetterGrade);
        }
    }
}

public void getGPA(){
calculateGPA();
}

private Double calculateGPA(){
    for(int i=0; i<classesTaken.size(); i++){
    }


    return 0.0;
}

public void printArray(){
    System.out.println("\n"+classesTaken);
}



}

転写テスター.java:

public class TranscriptTester {

public static void main(String[] args){
    Transcript test = new Transcript("11234", "Cody");
    test.addCourse("COP2013","A+");
    test.addCourse("COP2014","B+");
    test.addCourse("COP2015","B+");
    test.addCourse("COP2016","D+");
    test.addCourse("COP2017","A");
    test.updateCourse("COP2013", "B-");
    test.updateCourse("COP2014", "A+");
    test.getGPA();
    test.printArray();
}
}
4

1 に答える 1

5

問題の原因となっているため、静的フィールドの過剰使用を避けることをお勧めする理由を学習しています。解決策: オブジェクトの状態を保持するために静的フィールドを使用しないでください。

静的フィールドは、クラスのすべてのオブジェクトが共有するフィールドと考えてください。一度変更すると、すべてのオブジェクトが変更されます (実際には、オブジェクトではなく、クラス自体に属します)。

public class Course {

  //global variables
  private String courseID;

  // the fields below are shared by all the instances of Course.
  private static String letterGrade;
  private static Double numberGrade;

コードには、返された回答を呼び出して無視するなど、他にもいくつかの問題がありますcompute(...)が、それは別の質問で説明することだと思います。

于 2013-04-25T03:54:37.147 に答える