初学者Java Q.

时间:2013-04-24 23:00:31

标签: java

刚刚开始学习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();
    }


   }
  }
 }

5 个答案:

答案 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类。