0

刚开始学习Java,我怎样才能改变它以便它实际输出lamp1.printStateslamp2.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();
    }


   }
  }
 }
4

5 回答 5

1

您的代码很奇怪,创建一个“创建灯”的类是非常糟糕的做法,但是,让我们看看手头的问题。

当您的程序正在运行时,正在执行的main方法,Lamps而不是. 您需要自己调用该方法。您可以通过将您的方法放入.mainCreateLampsnew CreateLamps(args)mainLamps

但是,我仍然强烈建议您反对您的程序结构。

于 2013-04-24T23:05:57.400 回答
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);

    }
}
于 2013-04-24T23:16:02.287 回答
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
    }
}

你所拥有的是内部类的混杂,使用起来会很痛苦,而且不是你想要开始这次冒险的方式。

于 2013-04-24T23:06:00.310 回答
0

您已经混合了所有类和主要方法。您需要一个类,Lamp并且该类中的静态 main 方法可以为您进行测试。可能是这样的(我没有尝试编译它。)

我还冒昧地将“开/关”变量更改为布尔值。

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();
    }
}
于 2013-04-24T23:06:09.730 回答
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 类。

于 2016-02-05T19:45:01.057 回答