你好,在我的项目,几乎完成了一切,但遇到了一个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
}
让我们从printStudentDetails()
开始。你说什么都没有输出(大概是…(标题除外)。
for (int i = 0; i < numStudents; i++) {
if (students[i] != null)
students[i].printInfo();
}
问:为什么不打印?
A:两个可能的原因:
- 因为
numStudents
为零。 - 因为
students[i]
是null
…所有i
.
让我们看看上面的代码:
Student [] students;
int numStudents;
College(){}
College(String name, int num) {
this.name = name;
students = new Student[num];
}
在英语中,当创建College
时,student
被初始化为一个长度为num
的Student
对象数组。该数组的元素都是null
。值numStudents
将为0。
那么让我们看看ReadStudentDetails
代码,其中读取学生信息。
int type = sc.nextInt();
if (type == 1) {
FulltimeStudent fts = new FulltimeStudent();
fts.readInfo();
}
...
问:FulltimeStudent
对象发生了什么?
fts
变量超出了作用域,没有任何东西能够看到/使用您刚刚创建的对象。
Q:它是如何进入student
数组的?
A:没有!
问:为什么numStudents
仍然0<一口>1> 因为你的代码没有改变它们中的任何一个…当它创建Student
对象时!!或者其他任何地方。
Q:那么应该做什么呢?它是做什么的?A:应该是这样的。
- 检查
numStudents
小于students.length
- 将
fts
中的引用赋值给students[numStudents]
numStudents
增加1。
通读方法的其余部分,还有其他3个地方你在做同样的事情…或多或少。在每种情况下都需要类似的更正。
1 -事实上,我注意到就在ReadStudentDetails
方法的末尾,您正在增加numStudents
…一次。所以变量是1而不是0。但是你没有把任何学生放进students
,所以那里没有任何东西可以打印。
学习的经验教训
这里的主要教训是,应用程序执行您(程序员)(在代码中)告诉它要做的事情。仅此而已。没有什么更少。如果你不让它赋值…它不会。
所以,如果你想弄清楚为什么你的应用程序不工作,你需要仔细阅读你在代码中告诉它做什么。。然后比较你所看到的(例如输出,异常…或者没有输出)。并对这个问题进行一些推理。
我看到了行为x,什么情况会导致这种行为?关于这个节目的状态,我能推断出什么?我可以用其他方式确认吗?(通过添加trace print语句来打印变量。通过使用IDE的调试器。通过观察其他证据)
然后倒推…要弄清楚你可以观察或假设的情况或状态如何/为什么会发生……直到您发现了代码中的缺陷(bug)。
我建议你花点时间读读这些:
- 如何调试小程序
- 橡皮鸭调试
我还会注意到你的代码中还有其他错误…但我不打算指出来。此外,在您编写的代码中存在许多样式错误。我不知道你的作业是否会被标记为编码风格,但如果是的话,你应该(IMO)失去大部分的风格标记。在你提交作业之前一定要把它们修改好。(我不打算指出来。检查你的课堂笔记,等等)
一口>