Java 为什么我的显示方法要打印两次输出?
当我调用displayStatus方法时,输出将打印相同的输出两次。为什么呢?当我只调用一个display方法时,它会同时打印两个方法的输出。我试图让它在调用该方法时打印一次输出,但我不明白它为什么要打印两次 为什么我的显示方法要打印两次输出 这是因为在方法中有两组if语句Java 为什么我的显示方法要打印两次输出?,java,output,Java,Output,当我调用displayStatus方法时,输出将打印相同的输出两次。为什么呢?当我只调用一个display方法时,它会同时打印两个方法的输出。我试图让它在调用该方法时打印一次输出,但我不明白它为什么要打印两次 为什么我的显示方法要打印两次输出 这是因为在方法中有两组if语句 import java.util.*; public class Lights { boolean L1; boolean L2; public Lights(boolean x) {
import java.util.*;
public class Lights {
boolean L1;
boolean L2;
public Lights(boolean x) {
L1 = x;
L2 = x;
}
public void displayStatus() {
if (L1 == true) {
System.out.println("L1 is on");
} else if (L1 == false) {
System.out.println("L1 is off");
}
if (L2 == false) {
System.out.println("L2 is on ");
} else if (L2 == true) {
System.out.println("L2 is off");
}
}
}
class Simulator {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
System.out.println("Do want lamps on or off");
String s = console.nextLine();
boolean x = true;
if (s.equals("on")) {
x = true;
}
if (s.equals("off")) {
x = false;
}
Lights L1 = new Lights(x);
Lights L2 = new Lights(x);
L1.displayStatus();
L2.displayStatus();
}
}
此外,我在灯光对象(L1
和L2
)中看到了2个布尔标志,并且在代码中声明了2个灯光对象。您可能希望灯光类仅对应于一个灯光对象
灯光类只需要一个用于灯光状态的布尔值:
//print once
if(...){
}
else if(...){
}
//print again
if(...){
}
else if(...){
您创建了两个灯光对象:L1和L2,但灯光对象始终具有两个布尔属性(L1和L2以及…非常容易误导)->4个布尔值:L1.L1、L1.L2、L2.L2 因此,当您显示L1的状态时,您将根据L1.L1和L1.L2得到2个输出。。。
与L2灯光对象相同。因此,您可以得到4行作为输出。当我查看类设计时,我认为您对类的工作方式有些困惑。每个灯光实例都有两个设置为相同值的布尔字段。因此,
灯光L1
和灯光L2
中都有布尔值L1和L2,并将打印关于其中L1和L2的消息。没有神奇的自动检测,因为您命名了变量L1,它应该只打印包含L1的消息。简而言之:您可能应该回到关于类和实例以及它们如何工作的基本教程。您的if语句也可以这样简化:if(L1){System.out.println(“L1打开”);}else{System.out.println(“L1关闭”);}
。L1已经是布尔值,因此执行L1==true
是多余的。如果评估相反的场景也是多余的,则该程序需要两个灯光objects@SamuraiBale您可以有任意多个灯光对象实例,但在对象本身中,不需要有超过1个布尔值来表示灯光是打开还是关闭,正如此答案所示。
class Light{
private boolean lightIsOn;
public Light(boolean status){
this.lightIsOn = status;
}
public void displayStatus(){
if(lightIsOn)
System.out.println("Light is On");
else
System.out.println("Light is Off");
}
}