Java 方法返回null[simple]
对于介绍性Java,我将创建一个Door类和一个DoorTester类。本质上,我们正在试验实例变量并创建公共方法。我创建了door类,如下所示,但是我的DoorTester在查找.getState时返回“null” Door.javaJava 方法返回null[simple],java,null,encapsulation,instance-variables,Java,Null,Encapsulation,Instance Variables,对于介绍性Java,我将创建一个Door类和一个DoorTester类。本质上,我们正在试验实例变量并创建公共方法。我创建了door类,如下所示,但是我的DoorTester在查找.getState时返回“null” Door.java public class Door { // Create instance variables of type String private String name; private String state; // Declare method 'open
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
}
}您的getState()
方法不会返回state
,而是返回name
:
// Create an accessor of 'state'
public String getState() {
return name; // <-- Simply change this
}
您必须修改
Door
类的构造函数,如
public Door(String name, String state) {
this.name=name;
this.state=state;
}
实际上,name
和state
没有初始化。
另请参见此
修改的代码片段:
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;
}
}
公共类门{
//创建字符串类型的实例变量
私有字符串名称;
私有字符串状态;
//声明方法“打开”和“关闭”
公开作废{
state=“打开”;
}
公众假期结束(){
state=“已关闭”;
}
//为Door类添加构造函数
公共门(字符串名称、字符串状态){
this.name=name;
这个状态=状态;
}
//创建“状态”的访问器
公共字符串getState(){
返回状态;//您的门中存在问题
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
}
}
Java
中关键字的重要性您没有在构造函数中设置私有变量…..您从未在构造函数中分配过变量。我将其更改为state,但仍然返回null。@mshades:这只是两个问题中的一个。您需要做我提到的两个更正。谢谢,这两个问题一起解决了。您需要做什么“this”的意思是?-Java新手-这意味着您希望引用封闭类的上下文,无需使用this.state
,因为参数名为newState
。有没有办法不用“this”就可以这样做? @Keppil@mshades:当然可以,只需为字段和参数使用不同的名称,例如state
和newState
。
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
}
}