-1

您好,在我的项目中,几乎完成了遇到 sm 的所有事情,因此我们将不胜感激。它类,在我的类中,由于某些原因我无法访问变量,并且它们没有打印 sabcdahwidawidaowidawiodhwaidadihqwdoihqwdoihodihwdiohqwdoihqwdioqwddddddddddddddddddddddddddddd 我的项目有问题吗?我该如何解决这个问题?有人可以帮忙吗????

import java.util.
public abs
public String fi
pub
public 
Per

}
public voo() {  
    System.out.printlmber);
}   
}





public vo
}




import java.util.Scanner;
public cl
public double gpa;
StuScanner(System.in);
    System.out
    programNam
    System.out.printer: ");
    st
    System.out.print("Enter first name: ");
    firstName = sc.next();
    System.out.print("Enter last name: ");
    las
    System.out.print("Enter: ");
    ema
    System.out.print("Enter phone number: ");
    phoneN
   {
    Scanner sc =m.in);
    Sys("Enrses: ");

    doubl
    for(i
        System.out.print(""":");
        ma
    }

    ca  
   }
   @Override
    public void calculateGPA(double
    for(int i=0; i < m
 
   publiInfo() {
    System.out.printf("%25d  
,programName ;
}
 }




import jr;
publ
doub
    System.out.
}

public void printInfo() {   
    super.pr
    System.out.printf("%25d |\n"    
}
}




import java.util.Scanner;
public class Par    
d
ParttimeStud
@Override
public void rea
    Scanner sc = new 
    System.out.println("Ent cous:");
    courseFeesTotal
    System.out.prir credit hours:");
    cid printInfo() {   
    super.printInfo
import java.uti
public class College {
St
S
College
public void pri
    System.out.print
    fo
);
    System.out.printf("%n%15s  | %15s  | %15s  | %15s  | %15s  | %15s  | %15s  | %15s  |\n"
 "Programr
}
public void ReadStudls() {
    Scanner sc =ystem.in)
    System.out.printlnStud");
    System.out.print");
    int type = sc);
    if (type == 1) {    
        FulltimeStudent ftewdent();
        fts.readInfo();
    }
    else
        ParttimeSs = new nt(
    }
    else if (type 2) { 
nter ***");
    }
    while (type <1 || type >2){
        System.out.prinime S
        System.out.print("En

        }
        else}
        else if (type <1 || type >2) { 
public void printStude{
    if (
        System");
    }
    else {
        printTitle();
        for (intnts {
            if (stud 
                si]();
        }
    
}
}




import java.util.Scanner;
 public class ColltemTest {
public static voing[] args) {   
    Scanner sc = new Sc
    System.out.prine
    String name = s
    System.out.prin
    int ;   
    College c = newudents);     
    
    do {
        System.out.printent \n2 os \
  \
        option = 
            c.ReadStudentDeta
        else if 
    }while(optihilewning 
  until option 3 is cho
}
4

1 回答 1

1

让我们解决这个问题,从printStudentDetails()

你说什么都没有输出(大概......除了标题)。

    for (int i = 0; i < numStudents; i++) {
        if (students[i] != null) 
            students[i].printInfo();
    }

问:为什么什么都不打印?

答:两个可能的原因:

  1. 因为numStudents是零。
  2. 因为students[i]null……为所有人i

那么让我们看一下上面的代码:

Student [] students;
int numStudents;
College(){}

College(String name, int num) {
    this.name = name;
    students = new Student[num];
}

在英语中,当 aCollege被创建时,它被初始化为一个长度student为 的对象数组。该数组的元素都是. 该值将为零。StudentnumnullnumStudents

(这是否敲响了警钟?)

那么让我们看看ReadStudentDetails读取学生信息的代码。

int type = sc.nextInt();
if (type == 1) {    
    FulltimeStudent fts = new FulltimeStudent();
    fts.readInfo();
}
...

问:FulltimeStudent对象发生了什么?

A:你把信息读进去,然后……什么都没有。fts变量超出范围,任何东西都无法看到/使用您刚刚创建的对象。

问:它是如何进入student阵列的?

答:没有!!

问:为什么numStudents 仍然是零1?为什么students还是全部nulls

A:因为你的代码没有改变它们中的任何一个......当它创建Student对象时!或其他任何地方。

问:那它应该怎么做?

答:应该:

  1. 检查numStudents小于students.length
  2. 将引用分配ftsstudents[numStudents]
  3. numStudents一。

通读该方法的其余部分,还有其他 3 个地方您正在做同样的事情……或多或少。在每种情况下都需要类似的校正。

1 - 事实上,我注意到在你正在递增的方法结束时...... ONCE。所以变量将是一而不是零。但是你没有把任何学生放进去,所以那里不会有任何东西可以打印。ReadStudentDetailsnumStudentsstudents


要学习的教训

这里的主要教训是应用程序执行您(程序员)告诉它(在代码中)执行的操作。而已。一点也不差。如果你不告诉它分配一些东西......它不会。

所以如果你想弄清楚为什么你的应用程序不工作,你需要仔细阅读你在代码中告诉它做什么。 仔细。然后将您看到的内容(例如输出、异常……或无输出)与代码进行比较。并对问题应用一些推理。

我看到了行为 X。什么情况会导致这种行为?关于程序的状态,我可以推断出什么?我可以通过其他方式确认吗?(通过添加跟踪打印语句来打印出变量。通过使用我的 IDE 的调试器。通过查看其他证据。)

然后向后工作...找出您可以观察或假设的情况或状态如何/为什么发生...直到您发现代码中的缺陷(错误)。

我建议您花时间阅读以下内容:


我还会注意到您的代码中还有其他错误......但我不会指出它们。此外,您编写的代码中存在很多样式错误。我不知道你的作业是否会被标记为编码风格,但如果是的话,你应该(IMO)失去大部分风格标记。确保在提交作业之前修复它们。(而且我不会指出它们。检查你的讲义,等等。)

于 2021-10-16T14:09:54.757 回答