#java #inheritance #annotations #polymorphism #abstract-class
Вопрос:
привет в моем проекте и почти закончил все, но столкнулся с этим, так что любая помощь будет оценена по достоинству. Это класс, и в моих классах я по каким-то причинам не могу получить доступ к переменным, и они не печатают sabcdahwidawidaowidawiodhwaidadihqwdoihqwdoihwdiohqwdoihqwdioqwddddddddddddddddddddddddddddddddddd у меня проблемы в моем проекте? как я могу это исправить?? может кто-нибудь, пожалуйста, помочь????
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("%d
,programName ;
}
}
import jr;
publ
doub
System.out.
}
public void printInfo() {
super.pr
System.out.printf("%d |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("%ns | s | s | s | s | s | s | s |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
}
Комментарии:
1. Вы должны правильно отформатировать свой вопрос
2. мой вопрос, как я могу распечатать информацию, потому что прямо сейчас моя программа присваивает переменным нулевые значения, однако я ввожу в них значения, и в классе колледжа, когда я вызываю метод печати, он не выводит ничего, кроме заголовка, поэтому, если вы запустите программу, вы поймете, что я имею в виду, надеюсь, это объяснение поможет
3. Цель форматирования-облегчить другим людям чтение вашего кода. Если вы хотите , чтобы люди помогали вам, то это в ваших собственных интересах.
4. Насколько я могу видеть, вы никогда ничего не присваиваете
students
массиву.5. @StephenC как я могу его отформатировать
Ответ №1:
Давайте проработаем это, начиная с printStudentDetails()
Вы говорите, что ничего не выводится (предположительно … кроме названия).
for (int i = 0; i < numStudents; i ) {
if (students[i] != null)
students[i].printInfo();
}
Вопрос: Почему это ничего не печатает?
Ответ: Две возможные причины:
- Потому
numStudents
что равно нулю. - Потому
students[i]
что естьnull
… для всехi
.
Итак, давайте взглянем на приведенный выше код:
Student [] students;
int numStudents;
College(){}
College(String name, int num) {
this.name = name;
students = new Student[num];
}
На английском языке, когда College
создается a, student
инициализируется массив Student
объектов, длина которых будет равна num
. Все элементы этого массива будут null
. Значение numStudents
будет равно нулю.
(Это еще ни о чем не говорит?)
Итак, давайте посмотрим на ReadStudentDetails
код, в котором читается информация о студенте.
int type = sc.nextInt();
if (type == 1) {
FulltimeStudent fts = new FulltimeStudent();
fts.readInfo();
}
...
Вопрос: Что происходит с FulltimeStudent
объектом?
Ответ: Вы считываете в него информацию, а затем … ничего. fts
Переменная выходит за рамки, и ничто не сможет увидеть / использовать только что созданный вами объект.
Вопрос: Как он попадает в student
массив?
Ответ: Это не так!!
Вопрос: Почему все numStudents
еще ноль 1? Почему students
до сих пор все nulls
?
Ответ: Потому что ваш код не изменил ни один из них … когда он создал Student
объект!! Или где-нибудь еще.
Вопрос: Так что же он должен делать?
Ответ: Это должно:
- Проверьте, что
numStudents
это меньше, чемstudents.length
. - Назначьте ссылку на
fts
students[numStudents]
. - Увеличьте
numStudents
на единицу.
Читая остальную часть метода, есть еще 3 места, где вы делаете то же самое … более или менее. Подобные исправления требуются в каждом конкретном случае.
1 — На самом деле, я заметил, что прямо в конце ReadStudentDetails
метода вы увеличиваете numStudents
… однажды. Таким образом, переменная будет равна единице, а не нулю. Но вы не поместили туда никого из студентов students
, так что там не будет ничего, что можно было бы напечатать.
Уроки, которые нужно усвоить
Главный урок здесь заключается в том, что приложение делает то, что вы (программист) ему говорите (в коде). Ничего больше. Не меньше. Если вы не скажете ему что-то назначить … этого не произойдет.
Поэтому, если вы хотите выяснить, почему ваше приложение не работает, вам нужно внимательно прочитать, что вы сказали ему делать в коде. Внимательно. Затем сравните то, что вы видите (например, вывод, исключения … или отсутствие вывода) с кодом. И примените некоторые рассуждения к этой проблеме.
Я видел поведение X. Каковы обстоятельства, которые могли бы привести к такому поведению? Что я могу сделать о состоянии программы? Могу ли я подтвердить это каким-нибудь другим способом? (Путем добавления инструкций трассировки печати для вывода переменных. С помощью отладчика моей среды разработки. Обратившись к другим доказательствам.)
Затем работайте в обратном направлении … чтобы выяснить, как / почему могли произойти обстоятельства или состояние, которые вы можете наблюдать или выдвигать гипотезы … пока вы не достигнете точки, в которой вы определили недостаток (ошибку) в своем коде.
Я рекомендую вам найти время, чтобы прочитать эти:
Я также отмечу, что в вашем коде есть и другие ошибки … но я не собираюсь указывать на них. Кроме того, в коде, как вы его написали, много ошибок стиля. Я не знаю, будет ли ваше назначение отмечено в стиле кодирования, но если это так, вы должны (ИМО) потерять большинство знаков стиля. Убедитесь, что вы исправили их, прежде чем отправлять задание. (И я не собираюсь указывать на них. Проверьте свои конспекты лекций и так далее.)