我在另一个网站上看到了这个代码示例。我已经看了一段时间,试图找出一些简单的东西,但我很难确定从哪里开始。 我如何允许用户进入控制台以打开/关闭灯或风扇? 使用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);
}
}
答案 0 :(得分:3)
您可以将构造函数视为蓝图。
在上图中,我们在虚线框中有类。这是"蓝图。"它还不是一个实际的对象,它只是表示对象的外观。在实心框中是一个实际的对象。
构造函数获取蓝图并实际构建了一些东西。
Household(String choice,boolean isOn) {
this.isOn=isOn;
this.choice=choice;
}
在这里,我们正在定义该蓝图的工作原理。为了建立一个家庭对象,我们需要为它提供一个字符串" choice"和一个布尔" isOn"。 一旦我们有了这两件事,我们就可以创建一个Household对象。
现在,你可以在他们建造之前打开房子里的灯。 拥有一个Household对象后,您还可以选择isOn字段。 说我想关掉房子里的东西。
使用您的代码,我们有一个名为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
对象的实例(您可以将构造函数视为构造实例的东西)。您的构造函数说要调用它,它需要两个数据,String
和boolean
。当使用这两个数据调用构造函数时,它会将它们存储在它在choice
和isOn
字段中创建的实例中。
现在你有了Household
(hh
)的实例,你有一个包含两个数据的对象。如果要检索为其中一个变量存储的数据,可以使用getter。
hh.getChoice();
或
hh.isOn();
这将返回choice
/ isOn
字段中存储的Household
特定实例的数据。
如果要更改hh中存储的数据,请使用setter。因此,如果isOn改变值,你将使用
hh.setOn(true);
或
hh.setOn(false);