【问题标题】:Set & Get Methods设置和获取方法
【发布时间】:2018-11-30 19:53:36
【问题描述】:

Java I 学生在这里!

我很难理解如何设置和获取方法。我正在独立研究我的教科书 Java Programming, 9th Edition 中的一个问题,我被要求执行以下操作:

“创建一个名为Sandwich的类。数据字段包括一个String代表主要成分(例如金枪鱼),一个String代表面包类型(例如小麦),广告double 表示价格(例如 4.99)。包括获取和设置每个字段值的方法。”

然后它要求我这样做:

“创建一个名为TestSandwich 的应用程序,它实例化一个Sandwich 对象并演示set 和get 方法的使用。”

所以对于第一部分,我使用以下代码制作了一个 .java 文件:

public class Sandwich {
private String ingredient;
private String bread;
private double price;

public Sandwich(String ing, String bre, double pri) {
    ingredient = ing;
    bread = bre;
    price = pri;
}

public void setIngredient(String ing) {
    this.ingredient = ing;
}

public String getIngredient() {
    return ingredient;
}
public String getBread() {
    return bread;
}
public Double getPrice() {
    return price;
}
}

对于第二部分,我做了以下工作:

import java.util.Scanner;
public class TestSandwich {
public static void main(String[] args) {
    String Ingredient;
    String Bread;
    Double Price;
    Scanner keyboard = new Scanner(System.in);

    System.out.println("MAKE A SANDWICH");
    System.out.println("Enter an ingredient:  ");
    Ingredient = keyboard.nextLine();
    System.out.println("Enter bread:  ");
    Bread = keyboard.nextLine();
    System.out.println("Enter a price");
    Price = keyboard.nextDouble();

    Sandwich obj = new Sandwich(Ingredient, Bread, Price);

    System.out.println("The ingredient is " + obj.getIngredient());
    System.out.println("The bread is " + obj.getBread());
    System.out.println("The price is " + obj.getPrice());       
}
}

我完成了这个并且效果很好,但是我意识到我没有创建任何设置方法。有人可以根据指示向我解释一个更好的方法吗?我确信这种方式行得通,但我想按书去做,并且能够更好地理解它。我不确定从哪里开始创建 set 方法。请告诉我。非常感谢!

PS:这不是作业,我只是想更好地理解这一点。

-马克

【问题讨论】:

  • 你有一个setIngredient() 方法。看看这个,对 breadprice 做同样的事情
  • 请遵循Java命名约定:包、属性、变量、参数、方法必须以lowerCase开头,而类、接口应以UpperCase开头> / 并且不需要拆分声明和赋值,它可以是一次骨骼double price = keyboard.nextDouble();
  • @azro 你说得对,我很抱歉。我修好了,谢谢!
  • @GBlodgett 我想通了,谢谢!
  • @GhostCat 我会修复它并记住它以供将来参考。谢谢!

标签: java methods get set


【解决方案1】:

在这里您使用这些值创建一个对象

Sandwich obj = new Sandwich(Ingredient, Bread, Price);

在这里创建一个空对象,然后设置值

Sandwich obj = new Sandwich();
obj.setIngredient(Ingredient);
obj.setBread(Bread);
obj.setPrice(Price);

【讨论】:

  • 这回答了实际问题。
【解决方案2】:

在您的名为 Sandwich 的类中考虑以下代码:

public Sandwich(String ing, String bre, double pri) {
ingredient = ing;
bread = bre;
price = pri;
}

这称为构造函数,一种特殊的方法,与类同名。但它不返回值。此构造函数接受三个参数,其中两个是字符串,一个是双精度值。在构造函数主体中,您实际上是在设置作为参数传递给构造函数的值,因此您可以将其视为一次设置三个值的 setter 方法。

现在考虑在同一个类中的这段代码:

public void setIngredient(String ing) {
this.ingredient = ing;
}

这个方法是一个setter方法,它只设置一个值,即成分。您可以创建其他 setter 方法以及像这样给出您想要的任何名称。例如 Sandwich 类中的 setBread 和 setPrice 方法如下:

public setBread(String bre) {
bread = bre;
}
public setPrice(double pri) {
price = pri;
}

您可以使用构造函数来设置值或“setter 方法”(它只是用于接受和设置值的普通方法)。您可以使用单个方法一次性设置所有值,这就是构造函数正在执行的操作,或者使用单独的方法来设置每个值,就像我们定义的 setter 方法一样。

如果您使用单一方法一次设置所有值(在这种情况下为构造函数),那么在实例化 Sandwich 类期间,您需要一次将所有值传递给构造函数就像你这样做:

Sandwich obj = new Sandwich(Ingredient, Bread, Price);

如果没有按正确的顺序一次将三个变量传递给构造函数,则会出现编译错误。由于您已经有一个构造函数设置了三个值,因此其他 setter 方法没有多大用处,除非您需要在之后更改这些值。我希望这会有所帮助。

【讨论】:

  • 谢谢!我意识到构造函数和设置器的使用有点多余。我现在将其编码为仅使用构造函数。
  • 很高兴能帮上忙。
【解决方案3】:

简单的去像:

System.out.println("Enter another price");
double newPrice = keyboard.nextDouble();
obj.setPrice(newPrice);

并在该调用之前/之后打印您的obj(当然:在该类上使用@Overwrite toString() 以获得有意义的输出)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多