2014-09-26 2 views
0

Для вводной Java я создаю класс Door и класс DoorTester. По сути, мы экспериментируем с переменными экземпляра и создаем общедоступные методы. Я сделал класс двери следующим образом, но мой DoorTester возвращает "нулевой", когда он ищет .getStateМетод возвращает null [simple]

Door.java

public class Door { 
// Create instance variables of type String 
private String name; 
private String state; 

// Declare method 'open' and 'close' 
public void open() { 
    state = "open"; 
} 
public void close() { 
    state = "closed"; 
} 

// Add a constructor for the Door class 
public Door(String name, String state) { 
} 

// Create an accessor of 'state' 
public String getState() { 
    return name; 
} 

// Set the state 
public void setState(String newState) { 
    state = newState; 
} 

}

DoorTester.java

public class DoorTester { 
public static void main(String[] args) { 
    Door frontDoor = new Door("Front", "open"); 
    System.out.println("The front door is " + frontDoor.getState()); 
    System.out.println("Expected: open"); 
    Door backDoor = new Door("Back", "closed"); 
    System.out.println("Expected: closed");   
    // Use the mutator to change the state variable 
    backDoor.setState("open"); 
    System.out.println("The back door is " + backDoor.getState()); 
    System.out.println("Expected: open"); 
    // Add code to test the setName mutator here 
    } 

}

+0

Вы не устанавливаете частные переменные в свой конструктор ..... – Sebas

+0

Вы никогда не назначали свои переменные в своем конструкторе. – theGreenCabbage

ответ

0

Ваш getState() метод не возвращается state, она возвращает name:

// Create an accessor of 'state' 
public String getState() { 
    return name; // <-- Simply change this 
} 

Кроме того, ваш конструктор не устанавливает поля. Вам нужно сделать что-то вроде этого:

// Add a constructor for the Door class 
public Door(String name, String state) { 
    this.name = name; 
    this.state = state; 
} 
+0

Я изменил его на состояние, и null все еще возвращает. – mshades

+0

Изменение имени в состояние ???? оно не удалит ошибку – nobalG

+0

@mshades: Это была только одна из двух проблем. Я хочу упомянуть обо всех исправлениях. – Keppil

1

Вы должны изменить свой конструктор класса Door как

public Door(String name, String state) { 
this.name=name; 
this.state=state; 
} 

На самом деле name и state не получают инициализации. Также см этот What is the meaning of "this" in Java?


Модифицированный фрагмент кода:

public class Door { 
// Create instance variables of type String 
private String name; 
private String state; 

// Declare method 'open' and 'close' 
public void open() { 
    state = "open"; 
} 
public void close() { 
    state = "closed"; 
} 

// Add a constructor for the Door class 
public Door(String name, String state) { 
this.name=name; 
this.state=state; 
} 

// Create an accessor of 'state' 
public String getState() { 
    return state;   //<<<<<<<----------also make an Edit here 
} 

// Set the state 
public void setState(String newState) { 
    state = newState; 
} 
} 
+0

Что значит «это»? - Новое для Java - – mshades

+0

Это означает, что вы хотите обратиться к контексту окружающего класса – nobalG

+0

http://stackoverflow.com/questions/3728062/what-is-the-meaning-of-this-in-java – nobalG

0

Есть проблемы в вашем Door классе

public class Door { 
private String name; 
private String state; 

public void open() { 
    state = "open"; 
} 

public void close() { 
    state = "closed"; 
} 

public Door(String name, String state) { // argument passed here need to set 
// set like 
    this.name=name; 
    this.state=state; 
} 

public String getState() { 
    return name; 
} 

public void setState(String state) { 
    state = state; // you need to use this.state=state 
} 
} 

Важность this ключевое слово в Java

+0

Нет нужно использовать 'this.state', поскольку аргумент называется' newState'. – Keppil

+0

Есть ли способ, которым я могу это сделать без «этого»? @Keppil – mshades

+0

@mshades: Конечно, просто используйте разные имена для поля и аргумента, например. 'state' и' newState'. – Keppil