首页 > 解决方案 > 将信息从一个班级调用到另一个班级?

问题描述

我目前对编程和使用 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");


        }
}

标签: java

解决方案


你有这个构造函数:

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.


推荐阅读