gpt4 book ai didi

java - 在调试和运行期间由于某种原因跳过内部 if 语句

转载 作者:行者123 更新时间:2023-12-02 07:04:52 25 4
gpt4 key购买 nike

内部 if 语句被完全跳过,当我单步执行代码时它永远不会进入 updateGrade。它只是完全跳过 if 。为什么?

这是有问题的方法:

public void updateCourse(String courseID, String newLetterGrade){

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

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

根据我的调试器,当 i = 5 且我的 arrayList = 6 时,一旦我达到 6,它就会无缘无故地立即跳出循环。我不确定出了什么问题,因为在 make 或运行时没有显示任何错误。

这是在classesTaken中找到courseID内容时调用的方法:

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

我的测试文件如下所示:

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.addCourse();
test.updateCourse("COP2013", "B-");
test.updateCourse("COP2014", "A+");
test.getGPA();
test.printArray();
test.toString();
}
}

根据我的代码,它应该在classesTaken的第一次迭代时跳转到if语句,因为COP2013的索引为0。

如果您需要更多信息来帮助我,请询问。谢谢!

如果您想查看所有类文件是什么,这里是所有类文件:

public class Course {

//global variables
private String courseID;
private String letterGrade;
private 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 void compute(String letter){


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

}

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

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

}




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

public String getLetterGrade(){
return letterGrade;
}

public Double getNumberGrade(){
return numberGrade;
}



}

脚本文件:

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 addCourse(){
Course myCourse = new Course();
classesTaken.add(myCourse);
}

public void updateCourse(String courseID, String newLetterGrade){

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

if(classesTaken.get(i).equals(courseID)){
classesTaken.get(i).updateGrade(newLetterGrade);
}
}
}

public void getGPA(){
System.out.println("\nOverall GPA: "+calculateGPA());
}

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

return overallGPA / classesTaken.size();
}

public void printArray(){
for(int i=0; i<classesTaken.size(); i++){
System.out.println("\n"+classesTaken.get(i));
}
}



}

最佳答案

只需查看您的代码,我发现您正在滥用(除非您将 equalsString 一起使用)contains方法:

classesTaken.get(i).updateGrade

您正在调用updateGrade在对象上(某种类型,不是 String ),这显然不是 String类型。

但是你试图找到 String在列表中classesTaken列表:

classesTaken.contains(courseID)

显然没有String在此列表中。否则代码甚至无法编译(因为 String 没有 updateGrade 方法)

您应该覆盖equals或提供其他方法来查找字符串是否在自定义类的对象集合中

你应该这样做(假设你的类(class)是 ClassTaken ):

for(int i=0; i<classesTaken.size(); i++){
ClassTaken c = classesTaken.get(i);
if(c.getCourseId().equals(courseID)){
c.updateGrade(newLetterGrade);
}
}

关于java - 在调试和运行期间由于某种原因跳过内部 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16225615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com