【问题标题】:Set and display name and email Java objects classes设置和显示名称和电子邮件 Java 对象类
【发布时间】:2019-07-24 09:09:43
【问题描述】:

我有这个 java 类分配,它输入船员并显示他们的信息,我做过其他类似的案例,但不知道如何构建这个。 我要创建两个类,Sailor 和 CrewMember,它们与这个主要方法一起工作-

import java.util.ArrayList;

public class SailorProgram {

    public static void main(String[] args) {

        Sailor firstSailor = new Sailor("Jimmy", "jimmy@mail.com");
        Sailor secondSailor = new Sailor("Rose", "rose@mail.com");
        Sailor thirdSailor = new Sailor("James", "james@sailors.com");


        CrewMember firstCrew = new CrewMember();
        CrewMember secondCrew = new CrewMember();

        firstCrew.addCrewMember(firstSailor);
        firstCrew.addCrewMember(secondSailor);

        secondCrew.addCrewMember(thirdSailor);
        secondCrew.addCrewMember(secondSailor);

        System.out.println(" First crew \n" + firstCrew);
        System.out.println(" Second crew \n" + secondCrew);

        secondSailor.setEmail("Rose@sailors.com");
        System.out.println(" Second crew \n" + secondCrew);
    }
}

然后打印出来

First crew
Jimmy (jimmy@mail.com)
Rose (rose@mail.com)

Second crew
James (james@sailors.com)
Rose (rose@mail.com)

Second crew
James (james@sailors.com)
Rose (rose@sailors.com)

谢谢!

【问题讨论】:

  • 问题是?
  • 您是否尝试过创建这些类? :) 使用像样的 IDE,您的作业将在 3 秒内完成
  • @Yassin 我有,setter 和 getter 我还不清楚

标签: java arrays class object arraylist


【解决方案1】:

addCrewMember() 是我们想知道的关键方法。如果将Sailor 引用给secondCrew 类,输出会改变。

public class Sailor {
private String name;
private String email;

public Sailor(String name, String email) {
    this.name = name;
    this.email = email;
}

@Override
public String toString() {return name + " " + "(" + email + ")";}
}

如果 CrewMember.class 如下所示

import java.util.ArrayList;

public class CrewMember {

private final ArrayList<Sailor> sailors = new ArrayList<>();

public void addCrewMember(Sailor s) { //add sailors with this
    sailors.add(s);
}
@Override
public String toString() { return sailors.toString(); }
}

并在您的问题中运行您的主要方法 thr 输出是这样的:

 First crew 
 [Jimmy (jimmy@mail.com), Rose (rose@mail.com)]

 Second crew 
 [James (james@sailors.com), Rose (rose@mail.com)]

 Second crew 
 [James (james@sailors.com), Rose (Rose@sailors.com)]

Rose@sailors.com 改变了!因为 ArrayList Sailors 保存了 Rose Sailor 的引用

【讨论】:

  • 感谢它的工作,但玫瑰电子邮件格式对我来说并没有改变。另外,如何删除方括号?
  • CrewMember.class 有 toString() 方法,改变那个方法就可以改变输出
【解决方案2】:

这个问题并不完全清楚,但我会做出一些假设。首先,您的CrewMember 班级拥有水手,因此更合适的名称是Crew。例如,您可以使用ArrayList&lt;Sailor&gt; 来实现这一点。

class Crew {

    private final ArrayList<Sailor> sailors = new ArrayList<>();

    //other things, like constuctor here, if needed 

    public void addCrewMember(Sailor s) { //add sailors with this
        sailors.add(s);
    }
}

那么你的Sailor 类就很简单了。

class Sailor {

    private String name;
    private String email;

    public Sailor(String name, String email) {
        this.name = name; this.email = email;
    }

    //other methods, like getters here
}

编辑:我注意到您还需要打印对象。为此,您可以使用Object 类的toString 方法。 Sailor 类的示例:

@Override
public String toString() {
    return name + ", " + email;
}

使用System.out.println(sailor1) 将在sailor1 上调用此方法。

【讨论】:

  • 谢谢,我仍然不清楚 Crew 课程。我必须有一个 Crew() 构造函数、add Crew 方法和一个 toString。
  • 没错,这三种方法你应该没问题。您可以在构造函数中初始化水手列表。例如 toString 方法可以打印出所有的水手(我给了一个水手的 toString 作为例子,你可以在列表中的每个水手上使用它)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-21
  • 2017-02-23
  • 1970-01-01
  • 1970-01-01
  • 2013-07-11
  • 1970-01-01
相关资源
最近更新 更多