刚刚开始学习Java,我该如何更改它,以便它实际输出lamp1.printStates
和lamp2.printStates?
当我运行它时,它只返回它成功构建但没有别的。
package lamps;
public class Lamps {
public static void main(String[] args) {
class Lamp {
int on = 0;
int brightness = 0;
void changeOn(int newValue) {
on = newValue;
}
void changeBrightness(int newValue) {
brightness = newValue;
}
void printStates() {
System.out.println("On/Off:" + on +
" brightness:" + brightness);
}
}
class CreateLamps {
public void main(String[] args) {
Lamp lamp1 = new Lamp();
Lamp lamp2 = new Lamp();
lamp1.changeOn(1);
lamp1.changeBrightness(4);
lamp1.printStates();
lamp2.changeOn(1);
lamp2.changeBrightness(6);
lamp2.changeBrightness(4);
lamp2.changeOn(0);
lamp2.changeBrightness(0);
lamp2.printStates();
}
}
}
}
答案 0 :(得分:1)
你的代码很奇怪,创建一个“创建灯具”的课程是非常糟糕的做法,但是,让我们来看看手头的问题。
运行程序时,正在执行main
Lamps
方法,而不是main
CreateLamps
方法。您需要自己调用该方法。您可以通过new CreateLamps(args)
将main
方法放入Lamps
中来实现。
但是,我强烈反对你的计划结构。
答案 1 :(得分:0)
看起来你对如何最好地构建课程有一些基本的误解。
通常,一个类看起来像这样:
public class MyClass {
public MyClass() {
// constructor code
}
public static void main( String[] args ) {
MyClass myClass = new MyClass();
myClass.doStuff();
}
public void doStuff() {
// do stuff
}
}
你所拥有的是内心阶级的混乱,这将是一种痛苦的工作,而不是你想要开始这次冒险。
答案 2 :(得分:0)
你们已经将课程和主要方法混合在了一起。你需要一个类Lamp
,并且该类中的静态main方法可以为你测试一些东西。也许这样的事情(我没有尝试编译它。)
我还冒昧地将“on / off”变量更改为布尔值。
package lamps;
public class Lamp {
private boolean on = 0;
private int brightness = 0;
public void changeOn(boolean newValue) {
on = newValue;
}
public void changeBrightness(int newValue) {
brightness = newValue;
}
public void printStates() {
System.out.println("On:" + on +
" brightness:" + brightness);
}
public static void main(String[] args) {
Lamp lamp1 = new Lamp();
Lamp lamp2 = new Lamp();
lamp1.changeOn(true);
lamp1.changeBrightness(4);
lamp1.printStates();
lamp2.changeOn(true);
lamp2.changeBrightness(6);
lamp2.changeBrightness(4);
lamp2.changeOn(false);
lamp2.changeBrightness(0);
lamp2.printStates();
}
}
答案 3 :(得分:0)
我认为你在这里有点困惑的重要概念是类,方法和领域。字段定义数据。方法定义要应用于数据的行为(或导致其他一些影响)。类使用行为(方法)对数据(字段)进行分组。类还执行封装,这使我们能够使数据和方法对特定类是私有的,仅对类所属的包可用(即默认)或公开可用于任何其他类。
在这种情况下,你真的只需要一个班级。你可以让main方法完成大部分工作。您还可以保留为定义字段值和打印到System.out而定义的几种方法。您应该将您的方法和字段设为私有,除非您打算允许其他类访问它们。始终尽可能使用最高级别的隐私。它使其他人可以区分您的类的公共API以及仅用于内部的方法和字段。
public class Lamp {
private int on = 0;
private int brightness = 0;
public static void main(String[] args) {
Lamp lamp1 = new Lamp();
Lamp lamp2 = new Lamp();
lamp1.changeOn(1);
lamp1.changeBrightness(4);
lamp1.printStates();
lamp2.changeOn(1);
lamp2.changeBrightness(6);
lamp2.changeBrightness(4);
lamp2.changeOn(0);
lamp2.changeBrightness(0);
lamp2.printStates();
}
public void changeOn(int newValue) {
on = newValue;
}
public void changeBrightness(int newValue) {
brightness = newValue;
}
// maybe you don't want other classes to be able to print the state so make this method private
private void printStates() {
System.out.println("On/Off:" + on + " brightness:" + brightness);
}
}
答案 4 :(得分:0)
我知道你的问题是什么。如果要显示变量,则必须使用以下方法:
System.out.printf("");
所以试试这个:
package lamps;
public class Lamps {
public static void main(String[] args) {
int on = 0;
int brightness = 0;
void changeOn(int newValue) {
on = newValue;
}
void changeBrightness(int newValue) {
brightness = newValue;
}
void printStates() {
System.out.printf("On/Off: %d brightness %d"on,brightness);
}
}
public void CreateLamps() {
Lamp lamp1 = new Lamp();
Lamp lamp2 = new Lamp();
lamp1.changeOn(1);
lamp1.changeBrightness(4);
lamp1.printStates();
lamp2.changeOn(1);
lamp2.changeBrightness(6);
lamp2.changeBrightness(4);
lamp2.changeOn(0);
lamp2.changeBrightness(0);
lamp2.printStates();
}
}
应该这样做。
哦,而且,你不需要3个班级。只需创建方法而不是CreateLamps类。