将信息从一个班级调用到另一个班级?

时间:2020-09-10 13:56:13

标签: java

我对编程还比较陌生,目前正在与setter和getter一起工作。

我在某个学生班上设置了一些东西,其中包含有关该学生的信息,包括他们的名字,中间名和姓氏,他们的学生ID和他们的专业。

我需要对其进行设置,以便如果他们的学生ID小于零,它将自动将其设置为-1。如果他们没有输入任何内容,我还需要将专业设置为不确定。

我还需要重写toString方法并打印出所有这些信息。

我觉得我的名字的第一部分没有名字,但是我不确定其余部分。我不确定如何同时使用setter和getter来使用toString方法。

下面是我的学生班,负责所有工作。

name.onchange = function(){
        
     for(var i=1; i<table.rows.length; i++){
          if(table.rows[i].cells[0].textContent === this.value){
            console.log(table.rows[i].cells[0].textContent);
            table.rows[i].style.display = "";

          }else{
            table.rows[i].style.display = "none";
          }
      }
  } 

我还提供了Driver类,仅供参考。

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 ;
            
        }

}

2 个答案:

答案 0 :(得分:1)

您有以下构造函数:

public Student(String first, String middle, String last) {
    Objects.requireNonNull(first);
    Objects.requireNonNull(last);
}

它会执行检查名字和姓氏不是null的工作,但是除了检查之外,它不会对其他值做任何事情。构造函数的工作是构造对象,即初始化其成员变量。构造函数完成后,您应该有一个可用的对象,而不必在其中调用任何设置方法。

您需要添加:

public Student(String first, String middle, String last) {
    Objects.requireNonNull(first);
    Objects.requireNonNull(last);
    this.first = first;
    this.middle = middle;
    this.last = last;
}

请注意,您无需在此处使用setter,因为类中的代码可以直接访问成员变量。不过,您可以根据需要使用设置器。

对于toString:这是一种主要用于调试的方法,它显示一些有关被调用对象的有用信息。您可以像下面那样实现它,并用一点?:来确保只打印不是null的中间名:

@Override
public String toString() {
    return first + " " + (middle != null ? middle + " " : "") + last;
}

我会留给您包括专业和ID。

使用Scanner时:使用扫描器从某处获取输入,例如从用户那里获取。 toString或任何设置方法或获取方法中都不需要它。这些都是非常简单的方法,不能处理类似Scanner这样的I / O类。

答案 1 :(得分:0)

如果您正在使用构造函数,则实际上并不需要二传手。尝试这样的事情:

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而不是主ID(或者相反),则可以添加更多的构造函数。

相关问题