[英]Calling the info from one class to another class?
我目前對編程和使用 setter 和 getter 的工作還比較陌生。
我有一些設置,我有一個學生班級,其中包含有關所述學生的信息,包括他們的名字、中間名和姓氏、他們的學生 ID 和他們的專業。
我需要設置它,如果他們的學生 ID 小於零,它會自動將其設置為 -1。 如果他們不輸入任何內容,我還需要將主要設置為未定。
我還需要覆蓋 toString 方法並將所有這些信息打印出來。
我覺得我有第一部分的名字,但我不確定其余部分。 我不確定在使用 setter 和 getter 的同時應該如何使用 toString 方法。
下面是我完成所有工作的 Student 類。
import java.util.Objects;
import java.util.Scanner;
public class Student {
String first;
String middle;
String last;
String major = "Undecided";
static int studentID = -1;
public Student(String first, String middle, String last) {
Objects.requireNonNull(first);
Objects.requireNonNull(last);
}
public void setFirst(String A) {
first = A;
}
public void setMiddle(String B) {
middle = B;
}
public void setLast(String C) {
last = C;
}
private String getFirst() {
return first;
}
private String getMiddle() {
return middle;
}
private String getLast() {
return last;
}
private String getMajor() {
return major;
}
public void setMajor(){
static void register(int a){
if (a < 0) {
studentID = a;
} else {
studentID = getID(a);
}
}
private static int getID(int a) {
if (studentIDInput < 0) {
studentID = -1;
} else {
studentID = a;
}
return studentID;
}
public static void main(String[] args) {
String first = "abc";
String middle = "def";
String last = "ghi";
Scanner sc = new Scanner(System.in);
String majorInput = sc.next();
int studentIDInput = sc.nextInt();
Student student1 = new Student(first, middle, last);
System.out.println(student1.getFirst().toString() + " " + student1.getMiddle().toString() + " " + student1.getLast().toString() + '\n' + "Major:" + " " + student1.getMajor().toString() + '\n' );
}
@Override
public String toString() {
return ;
}
}
我還包含了 Driver 類,僅供參考。
public class Driver {
static String first;
static String middle;
static String last;
public static void main(String[] args){
Student student1 = new Student(first, middle, last);
student1.setFirst("Mikayla");
student1.setMiddle("Rose");
student1.setLast("Knox");
}
}
你有這個構造函數:
public Student(String first, String middle, String last) {
Objects.requireNonNull(first);
Objects.requireNonNull(last);
}
它的工作是檢查名字和姓氏是否不為null
,但除了檢查之外,它不會對值做任何事情。 構造函數的工作是構造對象,即初始化其成員變量。 當你的構造函數完成后,你應該有一個可用的對象,而不必在其中調用任何 setter。
你需要補充一點:
public Student(String first, String middle, String last) {
Objects.requireNonNull(first);
Objects.requireNonNull(last);
this.first = first;
this.middle = middle;
this.last = last;
}
請注意,這里不需要使用 setter,因為類中的代碼可以直接訪問成員變量。 不過,您可以根據需要使用 setter。
至於toString :這是一個主要用於調試的方法,它顯示有關它被調用的對象的一些有用信息。 你可以像下面那樣實現它,用一點?:
確保只打印中間名,如果它不為null
:
@Override
public String toString() {
return first + " " + (middle != null ? middle + " " : "") + last;
}
我會把它留給你還包括專業和 ID。
使用Scanner
:您使用掃描儀從某處獲取輸入,例如來自用戶的輸入。 在toString
或任何 setter 或 getter 中不需要它。 這些都是應該非常簡單的方法,而不是像Scanner
這樣的 I/O 類。
如果您正在使用構造函數,則實際上並不需要 setter。 嘗試這樣的事情:
class Student {
private String first;
private String middle;
private String last;
private String major;
private int studentID;
public Student(String first, String middle, String last) {
this(first, middle, last, "undecided", -1);
}
public Student(String first, String middle, String last, String major, int studentID) {
this.first = first;
this.middle = middle;
this.last = last;
this.major = major;
this.studentID = studentID;
}
@Override
public String toString() {
return "first: " + first + "\nmiddle: " + middle + "\nlast: " + last + "\nmajor: " + major + "\nid: " _ studentID;
}
}
這樣,當您創建具有 3 個參數的新 Student 對象時,最后 2 個參數會自動設置為“未定”和 -1。 如果出現您擁有 ID 而不是主要(或相反)的情況,您可以添加更多構造函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.