назначение значений переменным

#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();
    }
 

Вопрос: Почему это ничего не печатает?

Ответ: Две возможные причины:

  1. Потому numStudents что равно нулю.
  2. Потому 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 объект!! Или где-нибудь еще.

Вопрос: Так что же он должен делать?

Ответ: Это должно:

  1. Проверьте, что numStudents это меньше, чем students.length .
  2. Назначьте ссылку на fts students[numStudents] .
  3. Увеличьте numStudents на единицу.

Читая остальную часть метода, есть еще 3 места, где вы делаете то же самое … более или менее. Подобные исправления требуются в каждом конкретном случае.

1 — На самом деле, я заметил, что прямо в конце ReadStudentDetails метода вы увеличиваете numStudents … однажды. Таким образом, переменная будет равна единице, а не нулю. Но вы не поместили туда никого из студентов students , так что там не будет ничего, что можно было бы напечатать.


Уроки, которые нужно усвоить

Главный урок здесь заключается в том, что приложение делает то, что вы (программист) ему говорите (в коде). Ничего больше. Не меньше. Если вы не скажете ему что-то назначить … этого не произойдет.

Поэтому, если вы хотите выяснить, почему ваше приложение не работает, вам нужно внимательно прочитать, что вы сказали ему делать в коде. Внимательно. Затем сравните то, что вы видите (например, вывод, исключения … или отсутствие вывода) с кодом. И примените некоторые рассуждения к этой проблеме.

Я видел поведение X. Каковы обстоятельства, которые могли бы привести к такому поведению? Что я могу сделать о состоянии программы? Могу ли я подтвердить это каким-нибудь другим способом? (Путем добавления инструкций трассировки печати для вывода переменных. С помощью отладчика моей среды разработки. Обратившись к другим доказательствам.)

Затем работайте в обратном направлении … чтобы выяснить, как / почему могли произойти обстоятельства или состояние, которые вы можете наблюдать или выдвигать гипотезы … пока вы не достигнете точки, в которой вы определили недостаток (ошибку) в своем коде.

Я рекомендую вам найти время, чтобы прочитать эти:


Я также отмечу, что в вашем коде есть и другие ошибки … но я не собираюсь указывать на них. Кроме того, в коде, как вы его написали, много ошибок стиля. Я не знаю, будет ли ваше назначение отмечено в стиле кодирования, но если это так, вы должны (ИМО) потерять большинство знаков стиля. Убедитесь, что вы исправили их, прежде чем отправлять задание. (И я не собираюсь указывать на них. Проверьте свои конспекты лекций и так далее.)