Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:在作业分配中使用字符串作为实例变量。_Java_Variables_Instance - Fatal编程技术网

Java:在作业分配中使用字符串作为实例变量。

Java:在作业分配中使用字符串作为实例变量。,java,variables,instance,Java,Variables,Instance,我在开始这项Java任务时遇到了一些困难,希望能从你们那里得到一些指导。我的问题非常简单明了。。。如何接受tester方法的输入并开始使用“Dave”作为新名称?如何使Dave成为实例变量,以及如何在setName()和greetCrewMember()方法中开始使用该变量?完成后,我将如何分配Aruna?让我大吃一惊的是实例变量并在方法中调用它。谢谢你的帮助 public class Hal9000 { private String name; public static vo

我在开始这项Java任务时遇到了一些困难,希望能从你们那里得到一些指导。我的问题非常简单明了。。。如何接受tester方法的输入并开始使用“Dave”作为新名称?如何使Dave成为实例变量,以及如何在setName()和greetCrewMember()方法中开始使用该变量?完成后,我将如何分配Aruna?让我大吃一惊的是实例变量并在方法中调用它。谢谢你的帮助

public class Hal9000
{
    private String name;
    public static void main(String[] args)
    {
    Hal9000 hal = new Hal9000("Dave");
    System.out.println(hal.greetCrewMember());
    System.out.println("Expected: Welcome, Dave");
    System.out.println(hal.doCommand("engage drive"));
    System.out.println("Expected: I am sorry, Dave. I can't engage drive");
    hal.setName("Aruna");
    System.out.println(hal.doCommand("power down"));
    System.out.println("Expected: I am sorry, Aruna. I can't power down");
    }

    public String getName()
    {

    }

    public void setName(String newName)
    {
        String name = newName;
        return name;
    }

    public String greetCrewMember()
    {
        String message = "Welcome," + name ;
        return message;
    }

    public String doCommand(String whatToDo)
    {

    }
}

你唯一要做的就是定义一个参数化的构造函数-

Hal9000(String name)
{
this.name=name;
}
这将导致您的声明-

Hal9000 hal = new Hal9000("Dave");
要正确执行,请将名称设置为Dave。在此之后,您可以通过setname方法将名称设置为任何其他名称


您还需要在getname方法中定义一些内容。

您应该在构造函数中使用字段
name
,并使用
this
在setter和构造函数中实例化它

Hal9000(String name) {
    this.name = name;
}
进一步实例化为

Hal9000 instanceForDave = new Hal9000("Dave"); // would set the 'name' for this instance as 'Dave'
Hal9000 instanceForAruna = new Hal9000("Aruna");
setter实现在理想情况下也应该只使用
这个
名称,类似于您案例中的构造函数:

public void setName(String newName) {
    this.name = newName;
}
然后,当您需要获取类的
name
属性时,getter也会很有帮助

public String getName() {
    return this.name;
}

测试方法的输入你是什么意思?我指的是测试字符串“Dave”和“Aruna”,以查看我的代码是否正常工作。好的,这更有意义,而且有效!非常感谢你!你介意快速解释一下“this.name=name”这个词吗?我想我们还没有学过“this”,所以这对我来说是个新概念。它到底在做什么?这个指针用于引用我们正在讨论的当前实例。在这里,你可以看到方法的参数名为name,我想将其设置为实例的name变量。为了区别这一点,我使用this.name来表示它需要使用传递给参数的名称来设置实例变量名。谢谢!它起作用了,现在很清楚了。我仍然对代码中的“this”部分有些迷茫。它到底在做什么?@HenFish它指的是当前的对象。一定要多读一些-
public class Hal9000
{
    private String name;

    public Hal9000(String[] stringArray) {
        name = stringArray[0];
    }

    public static void main(String[] args)
    {
    String[] stringArray = { "Dave"};
    Hal9000 hal = new Hal9000(stringArray);
    System.out.println(hal.greetCrewMember());
    System.out.println("Expected: Welcome, Dave");
    System.out.println(hal.doCommand("engage drive"));
    System.out.println("Expected: I am sorry, Dave. I can't engage drive");
    hal.setName("Aruna");
    System.out.println(hal.doCommand("power down"));
    System.out.println("Expected: I am sorry, Aruna. I can't power down");
    }

    public String getName()
    {
        return this.name;
    }

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

    public String greetCrewMember()
    {
        String message = "Welcome," + getName() ;
        return message;
    }

  public String doCommand(String whatToDo) {
    return whatToDo;

  }
}