请老师看看,存在什么问题。如果姓名输入空格或者不输入可以使用String方法去对比吗

请老师看看,存在什么问题。如果姓名输入空格或者不输入可以使用String方法去对比吗

package com.imooc.teat;
import com.imooc.score.Subject;
import com.imooc.score.Student;
public class Text {
 public static void main(String[] args) {
  //创建学科对象
  Subject sub = new Subject("计算机科学与应用", "J0001", 4);
  System.out.println(sub.show());
  System.out.println("===============================");
  //创建学生对象
  Student stu1 = new Student("吴彦祖", "男", "X51099", 66);
  Student stu2 = new Student("小晶晶", "女", "X51100", 2);
  Student stu3 = new Student("蔡徐坤", "中", "X51101", 20);
  //传入学生对象进行关联并输出
  sub.addStudent(stu1);
  sub.addStudent(stu2);
  sub.addStudent(stu3);
  System.out.println("计算机科学与应用学科的人数为:"+sub.printStudent()+"人");
  
  
  
  
  //使用对象数组做为构造方法参数
  //创建数组对象
//  Student[] stu = new Student[5];
//  stu[0] = new Student("吴彦祖", "男", "X77210", 19);
//  stu[1] = new Student("李小三", "女", "X77211", 25);
//  stu[2] = new Student("黄飞鸿", "男", "X77212", 99);
//  stu[3] = new Student("","","",0);
//  stu[4] = new Student("", "无性别", "", 0);
//  //创建Subject对象,将stu做为参数
//  Subject sub = new Subject("计算机科学与应用", "J0001", 999, stu);
//  System.out.println(sub.show());
//  System.out.println("选择该专业的学生人数为:"+sub.printStudent()+"人");
  
  
  
//  //从无参构造方法中进入
//  Student sd = new Student();
//  Subject su = new Subject();
//  
//  System.out.println("===========================");
//  su.addStudent(sd);
//  System.out.println("该专业的学生人数为:"+su.printStudent()+"人");
  
  
  
 }
}

Subject类

package com.imooc.score;
//专业类
public class Subject {
 private String subjectName;// 专业名称
 private String subjectNo;// 专业编号
 private int subjectTime;// 专业时间,学制
 private Student[] stud; // 选择该科目的学生
 private int subjectNumber; // 选择该科目学生的人数
 // 无参构造方法
 public Subject() {
 }
 /**
  * 带参构造(重载)
  * 
  * @param subjectName 传入的专业名称
  * @param subjectNo   传入的专业编号
  * @param subjectTime 传入的专业学制
  */
 public Subject(String name, String no, int time) {
  setSubjectName(name);
  setSubjectNo(no);
  setSubjectTime(time);
 }
 /**
  * 带参构造(重载,带Student对象)
  * 
  * @param name 传入的专业名称
  * @param no   传入的专业编号
  * @param time 传入的专业学制
  * @param stud 传入的学生对象
  */
 public Subject(String name, String no, int time, Student[] stud) {
  setSubjectName(name);
  setSubjectNo(no);
  setSubjectTime(time);
  setStudent(stud);
 }
 // set\get方法
 public void setSubjectName(String subjectName) {
  this.subjectName = subjectName;
 }
 public String getSubjectName() {
  // 如果获取的字符串为空,返回指定字符串
  if (subjectName == null)
   return "专业未指定";
  else
   return subjectName;
 }
 public void setSubjectNo(String subjectNo) {
  this.subjectNo = subjectNo;
 }
 public String getSubjectNo() {
  // 如果获取的编号未被赋值,返回指定字符串
  if (subjectNo == null)
   return "编号未指定";
  else
   return subjectNo;
 }
 public void setSubjectTime(int subjectTime) {
  // 如果参数小于2或者大于5,强行赋值为4
  if (subjectTime < 2 || subjectTime > 5)
   this.subjectTime = 4;
  else
   this.subjectTime = subjectTime;
 }
 public int getSubjectTime() {
  // 如果获取学制为0时,返回厂长的暗号
  if (subjectTime == 0)
   return 7777777;
  else
   return subjectTime;
 }
 public void setStudent(Student[] stud) {
  // 从构造方法接收后,为学生学科赋值
  for (int i = 0; i < stud.length; i++) {
   stud[i].setSubject(this);
  }
  this.stud = stud;
 }
 public Student[] getStudent() {
  // 如果发现未创建对象,先创建后返回
  if (stud == null)
   stud = new Student[100];
  return stud;
 }
 public void setSubjectNumber() {
  this.subjectNumber = 0;
 }
 public int getSubjectNumber() {
  return subjectNumber;
 }
 /**
  * 将学生对象和专业对象进行关联,(用于从不带学生对象的构造函数中进入的步骤)
  * 
  * @param stu 传入的学生对象
  */
 public void addStudent(Student stu) {
  for (int i = 0; i < getStudent().length; i++) {
   if (getStudent()[i] == null) {
    getStudent()[i] = stu;
    stu.setSubject(this);
    return;
   }
  }
 }
 /**
  * 输出信息函数
  * 
  * @return 返回Subject类,各信息打包成的字符串
  */
 public String show() {
  String str;
  str = "专业信息如下:\n专业名称:" + getSubjectName() + "\n专业编号:" + getSubjectNo() + "\n学制年限:" + getSubjectTime();
  return str;
 }
 /**
  * 输出选择该科目的学生信息
  * 
  * @return 选择该科目的学生人数
  */
 public int printStudent() {
  int i;
  System.out.println(getSubjectName()+"科目学生信息如下");
  // 学生对象不为null是,循环输出学生信息
  for (i = 0; i < getStudent().length; i++) {
   if(getStudent()[i] != null) {
   System.out.println("===============================");
   System.out.println(getStudent()[i].showStudent());
   }else
    return i;
  }
  return i;
 }
}

Student类

package com.imooc.score;
//学生类
public class Student {
 private String studentName; // 学生姓名
 private String studentSex; // 学生性别
 private String studentNo; // 学生编号
 private int studentAge; // 学生年龄
 private Subject sub; // 学生所选专业
 // 无参构造
 public Student() {
 }
 /**
  * 含参构造方法(重载)
  * 
  * @param name 学生姓名
  * @param sex  学生性别
  * @param no   学生编号
  * @param age  学生年龄
  */
 public Student(String name, String sex, String no, int age) {
  setStudentName(name);
  setStudentSex(sex);
  setStudentNo(no);
  setStudentAge(age);
 }
 /**
  * 含参构造方法(重载,带Subject对象)
  * 
  * @param name 学生姓名
  * @param sex  学生性别
  * @param no   学生编号
  * @param age  学生年龄
  * @param sub  所选专业
  */
 public Student(String name, String sex, String no, int age, Subject sub) {
  setStudentName(name);
  setStudentSex(sex);
  setStudentNo(no);
  setStudentAge(age);
  setSubject(sub);
 }
 // set\get方法
 public void setStudentName(String name) {
  this.studentName = name;
 }
 public String getStudentName() {
  // 如果从无参构造进入后,不进行set函数赋值,要返回时,直接返回指定字符串
  if (studentName == null)
   return "王麻子";
  else
   return studentName;
 }
 public void setStudentSex(String sex) {
  // 如果输入的性别不是男也不是女则强制赋值为指定字符串
  if (sex.equals("男") || sex.equals("女"))
   this.studentSex = sex;
  else
   this.studentSex = "强人锁男";
 }
 public String getStudentSex() {
  // 走无参构造方法进来后未赋值就返回,返回指定字符串
  if (studentSex == null)
   return "未知";
  else
   return studentSex;
 }
 public void setStudentNo(String no) {
  this.studentNo = no;
 }
 public String getStudentNo() {
  // 如果没有值,则返回指定字符串
  if (studentNo == null)
   return "98757";
  else
   return studentNo;
 }
 public void setStudentAge(int age) {
  // 如果年龄大于60或者小于10,强行赋值为18
  if (age < 10 || age > 60)
   this.studentAge = 18;
  else
   this.studentAge = age;
 }
 public int getStudentAge() {
  // 如果数值未初始,返回18
  if (studentAge == 0)
   return 18;
  else
   return studentAge;
 }
 public void setSubject(Subject sub) {
  this.sub = sub;
 }
 public Subject getSubject() {
  // 如果没有对象则建立一个马上返回
  if (sub == null)
   return new Subject();
  else
   return sub;
 }
 /**
  * 将Student对象信息打包成一个字符串
  * 
  * @return 返回由对象信息打包成的字符串
  */
 public String showStudent() {
  String str;
  str = "姓名:" + getStudentName() + "\n性别:" + getStudentSex() + "\n学号:" + getStudentNo() + "\n年龄:"
    + getStudentAge() + "\n科目:" + getSubject().getSubjectName() + "\n学制年限:" + getSubject().getSubjectTime() + "\n学科编号:"
    + getSubject().getSubjectNo();
  return str;
 }
}


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,代码完成的非常好,

如果姓名中输入空格或者不输入,我们需要使用equals()方法进行比较,而不是使用‘==’。因为equals方法比较的是字符串的内容。而==比较的是两个对象的地址。所以建议修改为:

http://img1.sycdn.imooc.com//climg/5d41355d00011e6406150157.jpg

另外,不建议在get方法中判断,因为如果只是在get中做判断,相当于获取到的不是真实属性的值,而在set中进行设置,才可以给属性设置要求中的值  。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!


  • 长情意在夜雨香 提问者 #1
    老师你好。我非常怕从无参构造方法中进去,然后直接调用set方法,所以想返回一个默认值来确保程序不出错。那我在if语句后的第一个return语句的内容改为"未正确输入姓名"可以吗。这样不正确的调用可以给一个提示。
    2019-07-31 18:10:24
  • 同学你好,如果在主方法中没有创建无参构造方法,并且没有添加到学生数组中,是不会调用set方法的。if语句后的第一个return语句的内容改为"未正确输入姓名"是可以的。 如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2019-07-31 18:22:16
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师