【问题标题】:Java: Using a String as an instance variable in homework assignment.Java:在作业分配中使用字符串作为实例变量。
【发布时间】:2017-09-16 04:55:02
【问题描述】:

我在开始这项 Java 作业时遇到了一些麻烦,希望能从你们那里得到一些指导。我的问题非常简单明了...如何获取测试方法的输入并开始使用“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)
    {

    }
}

【问题讨论】:

  • 测试方法的输入什么意思?
  • 我的意思是测试字符串“Dave”和“Aruna”,看看我的代码是否正常工作。

标签: java variables instance


【解决方案1】:

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

Hal9000(String name)
{
this.name=name;
}

这会导致你的陈述——

Hal9000 hal = new Hal9000("Dave");

正确执行并将名称设置为 Dave。在此之后,您可以通过 setname 方法将名称设置为其他任何名称。

你还想在你的 getname 方法中定义一些东西。

【讨论】:

  • 好的,这更有意义,而且有效!非常感谢!你介意快速解释一下“this.name=name;”吗?我不相信我们已经了解了“这个”,所以这对我来说很新。它到底在做什么?
  • 这个指针用于引用我们正在谈论的当前实例。就像这里你可以看到方法的参数被称为名称,我想将它设置为实例的名称变量。为了做到这一点,我使用 this.name 来表明它使用传递给参数的名称来设置实例变量名称。
【解决方案2】:

您应该在构造函数中使用name 字段,并在setter 和构造函数中使用this 对其进行实例化。

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 实现也应该只使用 this 名称,类似于您的构造函数:

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

然后当你需要获取类的name 属性时,getter 会很有帮助

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

【讨论】:

  • 谢谢!它有效,现在非常清楚。我仍然对代码的“this”部分感到迷茫。它到底在做什么?
  • @HenFish 指的是当前对象。请阅读更多相关信息 - stackoverflow.com/questions/3728062/…
【解决方案3】:
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;

  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多