java - 将信息从一个班级调用到另一个班级?
问题描述
我目前对编程和使用 setter 和 getter 比较陌生。
我设置了一些东西,我有一个学生班级,其中包含有关该学生的信息,包括他们的名字、中间名和姓氏、学生 ID 和专业。
我需要设置它,如果他们的学生 ID 小于零,它会自动将其设置为 -1。如果他们不输入任何内容,我还需要将专业设置为未定。
我还需要重写 toString 方法并将所有这些信息打印出来。
我觉得我的第一部分名字都记下来了,但是我不确定其余的部分。我不确定在使用 setter 和 getter 的同时应该如何使用 toString 方法。
下面是我的学生课,它完成了所有的工作。
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);
}
它会检查 first 和 last name 是否不是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。
关于使用 a Scanner
:您使用 Scanner 从某处获取输入,例如来自用户的输入。您不需要它toString
或任何 setter 或 getter。这些都是应该非常简单且不处理 I/O 类的方法,例如Scanner
.
推荐阅读
- javascript - 在 If == 语句中选择 2 件事?
- angular7 - 如何将令牌功能放在一个文件中并导入我需要的地方
- c# - 在 ASP.NET 页面中的用户控件之间切换的正确做法
- sql - 通过 GROUP BY 语句中的另一列的 MAXIMUM 和二进制变量选择另一条记录 - SQL Server
- angular - npm 安装错误:'ENOENT:没有这样的文件或目录'
- jquery - “未定义的索引:数据”
- directx - 我的简单渲染目标视图不起作用
- sql-server-2008-r2 - SQL Server:从表中选择具有最近日期的条目
- android - 如何在 qt-android 和 android 版本是 8.0 中使用通知
- coq - 尝试构建 coq 源代码时如何安装“dllcoqrun.so”?