使用Setter和getters操作变量

时间:2015-09-16 16:11:39

标签: java

我在另一个网站上看到了这个代码示例。我已经看了一段时间,试图找出一些简单的东西,但我很难确定从哪里开始。 我如何允许用户进入控制台以打开/关闭灯或风扇? 使用setter / getter的所有这些东西都令人困惑。编写打开/关闭某些内容的逻辑似乎很简单,但将它与构造函数和setter / getter混合在一起我会迷失方向。我无法理解如何以及在何处使用用户输入操作isOn布尔值。

我很感激任何指导或代码。 感谢

public class Household {

   public String choice;//instance variables
   public boolean isOn;

   //constructor
   Household(String choice,boolean isOn) {
       this.isOn=isOn;
       this.choice=choice;
   }

   //methods
   public String getChoice() {
       return choice;
   }

   public void setChoice(String choice) {
       this.choice = choice;
   }

   public boolean isOn() {
       return isOn;
   }

   public void setOn(boolean isOn) {
       this.isOn = isOn;
   }

   public String toString() {
       return "Choice:" + getChoice() + "\tisOn:" + (isOn() ? "Yes" : "NO");
   }

   public static void main(String[] args) {

       Household hh=new Household("toaster", true);
       System.out.println(hh);
       hh=new Household("fan", false);
       System.out.println(hh);
   }
}

3 个答案:

答案 0 :(得分:3)

您可以将构造函数视为蓝图。

no 在上图中,我们在虚线框中有类。这是"蓝图。"它还不是一个实际的对象,它只是表示对象的外观。在实心框中是一个实际的对象。

构造函数获取蓝图并实际构建了一些东西。

   Household(String choice,boolean isOn) {
   this.isOn=isOn;
   this.choice=choice;
   }

在这里,我们正在定义该蓝图的工作原理。为了建立一个家庭对象,我们需要为它提供一个字符串" choice"和一个布尔" isOn"。 一旦我们有了这两件事,我们就可以创建一个Household对象。

现在,你可以在他们建造之前打开房子里的灯。 拥有一个Household对象后,您还可以选择isOn字段。 说我想关掉房子里的东西。 enter image description here

使用您的代码,我们有一个名为hh的家庭,一个烤面包机和一个开/关开关。如果您想关闭开/关开关,请使用设置器:

    public void setOn(boolean isOn) {
    this.isOn = isOn;
    }

然后setter设置hh对象上isOn字段的值,如上图所示。

如果您想知道该开关是真还是假(开或关),您可以问:

hh.getOn();

返回一个布尔值,与对象上的isOn字段的值相同。

您可以在致电时看到此消息

System.out.println(hh.getOn());

这会打印出真或假,具体取决于它是否设置为true或false。

setter和getter是如何工作的:setter设置该字段的值,getter获取字段的值。

现在为(更多)有趣的部分。

由于您希望输入数据,而不是简单地输出数据,我们必须做一些不同的事情。

假设我想在控制台中输入用户类型" off"并将家庭开/关设置为关闭。

System.out.println(hh); <-- only prints out to console

我们需要一个新对象来处理输入。扫描仪通常用于教学初学者,因此我们将使用它。

Scanner s = new Scanner(System.in);

这将从系统的输入流中读取数据。您可以阅读Scanner here.

现在,scanner使用nextLine()读取数据作为字符串; 所以我们将使用它。

String test = s.nextLine();

当然,现在我们需要测试该字符串是否与&#34; off&#34;相同,如果是,则将isOn字段设置为false(关闭)。

if(test.equals("off") || test.equals("OFF")){
hh.setOn(false);
}

我不会详细了解如何完成剩下的工作,例如检查输入,循环等。

逻辑应该在此应用程序的主要方法。 无论您需要修改家用对象,都需要调用这些setter / getter方法。只有在需要一个全新的对象时才会调用构造函数。如果这仍然令人困惑,请将构造函数与建立垄断游戏进行比较。你最初建立了垄断委员会,给每个人他们的钱和起始房产等等。这一切都是为了让你真正玩游戏。当您在游戏中丢失属性时,您将使用setter删除该属性。当你需要查看多少钱时,你会使用吸气剂。

MonopolyPlayer{
int cash;
MonopolyPlayer(){
    cash = 1500; 
    //we're setting this player up to play the game
}


setCash(int i); //now the player has a new amount of cash
getCash(); // he's checking his account
....etc.
}

等等。

答案 1 :(得分:0)

How would I allow a user to enter into the console to turn the light or the fan on/off?

使用您的代码,您可以执行类似的操作。

public static void main(String[] args) {
    System.out.println("Enter On or Off for fan: ");
    Scanner scanner = new Scanner(System.in);
    String input = scanner.nextLine();
    boolean on = false;
    if(input.equalsIgnoreCase("yes")) {
       on = true;
    } else if( input.equalsIgnoreCase("no")) {
       on = false;
    } else {
       System.out.println("Please enter yes or no!");
       return;
    }

    Household fan=new Household("fan", on);
    System.out.println(hh);
}

但这并非真正使用你的二传手或吸气剂。您可以像这样创建您的家庭班级,

public class Household {

    private String choice;//instance variables
    private boolean isOn;

    public void setOn(boolean isOn) {
        this.isOn = isOn;
    }

    public boolean getOn() {
        return isOn;
    }

    public void setChoice(String choice) {
        this.choice = choice;
    }

    public String getChoice() {
        return choice;
    }

    public String toString() {
       return "Choice:" + getChoice() + "\tisOn:" + (isOn() ? "Yes" : "NO");
    }
}

在上面的代码中将其切换为:

Household fan = new Household();
fan.setChoice("fan");
fan.setOn(on);
System.out.println(fan);

答案 2 :(得分:0)

所以试着把它分解。

getter和setter背后的想法是能够检索和设置对象内变量的数据,而不必自己公开变量。这意味着您应该将类​​顶部的字段声明为private。您只希望能够通过getter和setter访问它们。

在main方法中,您可以使用构造函数创建Household对象的实例(您可以将构造函数视为构造实例的东西)。您的构造函数说要调用它,它需要两个数据,Stringboolean。当使用这两个数据调用构造函数时,它会将它们存储在它在choiceisOn字段中创建的实例中。

现在你有了Householdhh)的实例,你有一个包含两个数据的对象。如果要检索为其中一个变量存储的数据,可以使用getter。

hh.getChoice();

hh.isOn();

这将返回choice / isOn字段中存储的Household特定实例的数据。

如果要更改hh中存储的数据,请使用setter。因此,如果isOn改变值,你将使用

hh.setOn(true);

hh.setOn(false);