Set和Get方法

3

我是一名Java I学生!

我在理解如何创建设置和获取方法方面遇到了困难。我正在独立完成教材Java编程,第9版中的问题,并被要求执行以下操作:

“创建一个名为Sandwich的类。数据字段包括用于主要成分(如金枪鱼)的String、面包类型(如小麦)的String和价格(如4.99)的double。包括用于设置和获取这些字段的值的方法。”

然后它要求我执行以下操作:

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

那么首先,我创建了一个.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());       
}
}

我完成了这个程序,它运行得很好,但是我意识到我没有创建任何设置方法。有人能根据说明书向我解释更好的方法吗?我相信这种方法可以工作,但我想按照规范来做,并且能够更好地理解它。我不确定从哪里开始创建设置方法。请告诉我。非常感谢!
附注:这不是作业,我只是想更好地理解它。
-Mark

1
请遵循Java命名规范:包、属性、变量、参数和方法必须以小写字母开头,而类和接口应以大写字母开头。声明和赋值无需分开,可以一次完成double price = keyboard.nextDouble(); - azro
1
@GBlodgett 我已经解决了,谢谢! - GovernorDynamic
1
@GhostCat,我会修复它并记住它以供日后参考。谢谢! - GovernorDynamic
我建议在有少量必填字段时使用构造函数。对于可选字段或可能更改的字段,使用setter是有意义的。 - Peter Lawrey
@PeterLawrey 我觉得你说得对,但我只是想按照书上的方法来做。在书的早期阶段,它会让你在多个类之间做一些事情,这些事情可能本可以在单个类的主方法中完成。我认为他们只是想让你理解这样做的概念。 - GovernorDynamic
显示剩余2条评论
3个回答

3
在这里,您可以使用这些值创建一个对象。
Sandwich obj = new Sandwich(Ingredient, Bread, Price);

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

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

这回答了实际问题。 - Notsileous

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方法,例如在三明治类中创建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方法除了在您需要之后更改这些值时并不是非常有用。希望这可以帮到您。

1
谢谢!我意识到构造函数和设置器的使用有点冗余。现在我已经编码,只使用构造函数。 - GovernorDynamic
我很高兴能够帮忙。 - arunken

1
简单的go如下:
System.out.println("Enter another price");
double newPrice = keyboard.nextDouble();
obj.setPrice(newPrice);

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接