我有一个带有对象的arrway,现在我想用字符串填充这些对象

swe*_*men 1 java arrays

免责声明:这是家庭作业

嗨,

目标:创建一个包含不同房间的公寓/公寓,可以由一个人(租房者)租用.我可以制作新的租房者(如果有免费房间)并在他们想要离开时删除租房者.

是)我有的:

我创建了一个名为Flat with custom的自定义数组.

首先,我创建了一个数组(没有ArrayList,因为我事先知道了数组的大小)

Flat(int a) {
    rooms = new Room[a];

    for (int i = 0; i < rooms.length; i++) {
        rooms[i] = new Room(); 
    }
}
Run Code Online (Sandbox Code Playgroud)

其次,我已经在房间中添加了一个Renter对象,起初它们将为NULL,因为我想检查房间是否是空的.

public class Room {
renter Renter; 

    Room() {
        renter = null; 
    }
}
Run Code Online (Sandbox Code Playgroud)

所以,现在我有一个带有租用对象的房间的数组,这些对象被设置为null.

第二部分:

我有一个名为Renter的课程.

租客必须包含姓名和姓氏.此数据将使用扫描仪类填写.我的租借者类看起来像这样:

public Class Renter {

    private String name; 
    private String lastName; 

    public void setName(String name) { 
        this.name = name; 
    }

    public void setName(String lastName) { 
        this.lastName = lastName; 
    }
Run Code Online (Sandbox Code Playgroud)

好到目前为止很好:

现在我想在一个房间可用时将租房者添加到房间.

所以在我的Flat类中,我有一个newRenter方法,如下所示:

void newRenter() {
       (if freeRooms > 0) {
          for (int i = 0; i < rooms.length; i++) {
            if (rooms[i].renter == null) {
                rooms[i].renter = new Renter(); 
            }
          }
        } else {
           System.out.println("No rooms available"); 
    }
Run Code Online (Sandbox Code Playgroud)

现在,是我迷失的部分.我不知道如何使用scanner类填充这个新制作的renter对象.

我的解决方案不起作用

感觉就像我应该以"另一种方式"来做这件事.首先创建一个空对象然后用正确的数据填充它们.

例如,在我的租用者类中,我可以使用以下构造函数:

Renter() {
    name = ""; 
    lastname = ""; 
}
Run Code Online (Sandbox Code Playgroud)

我希望这个值填充正确的数据.所以我想我会创建二传手.

public void setName(String name) {
    this.name = name; 
}

public void setLastname(String lastname) {
    this.lastname = lastname; 
Run Code Online (Sandbox Code Playgroud)

然后在我与我的用户交互的班级中,我将使用扫描仪类并使用正确的信息填充这些setter:

public class userInput() {
String name;  
String lastname; 

    public static String retrieveInput() {
    Scanner input = new Scanner(System.in);      
    if (input.hasNextLine()) {    
    } 
    return input.nextLine(); 
}

    public static void retrieveNameRenter() {
        System.out.println("Please give your firstname:");
        name = userInput(); 
        System.out.println("Please give your lastname:");
        lastname = userInput();

            //GIVE THE SETTERS MY INFO
            Renter.setLastname(lastname);
            Renter.setname(name);
Run Code Online (Sandbox Code Playgroud)

我遇到的问题主要是因为我想用静态方法(retrieveNameRenter)来查找对象的值(非静态的).

现在我的问题:

1)我的解决方案有意义吗?

2)如果确实如此,我该如何解决这些错误(我已经尝试了很多,不同的,类,公共,私人等等)

error: non-static method setLastname(String) cannot be referenced from a static context
        Renter.setLastname(lastname);  
Run Code Online (Sandbox Code Playgroud)

Jun*_*san 6

您无法以某种static方式访问类实例方法,即只使用类名.您需要创建该类的实例以调用实例方法.这些是不正确的陈述:

Renter.setLastname(lastname);
 Renter.setname(name);
Run Code Online (Sandbox Code Playgroud)

使用new创建Renter类的实例并使用该实例调用方法,如下所述:

Renter renter = new Renter();
renter.setLastname(lastname);
renter.setname(name);
Run Code Online (Sandbox Code Playgroud)

在此处了解有关实例和类变量和方法的更多信息:http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html