2013-04-24 119 views
0

刚开始学习Java,我该如何改变它,以便它实际上输出lamp1.printStateslamp2.printStates?当我运行它时,它只是返回它成功构建但没有别的东西。初学者Java问题

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

您可能正在构建您的项目而不运行它。你在用什么IDE(例如eclipse,Netbeans)? – ApproachingDarknessFish 2013-04-24 23:05:31

+0

Netbeans,我一直在运行这个项目。 – User1 2013-04-24 23:13:05

回答

1

你的代码是很奇怪的,并创建一个类来“创造灯”是非常不好的做法,但尽管如此,让我们看看手头的问题。

当您的程序正在运行时,main方法的Lamps正在执行,但的方法不是CreateLamps。你需要自己调用这个方法。您可以在Lampsmain方法中使用new CreateLamps(args)

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

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 
    } 
} 

你有什么是内部类的大杂烩这将是一个痛苦继续努力,不是你想怎么开始这次冒险。

0

你已经有了所有的课程和主要方法混杂在一起。你需要一个类,Lamp,并且该类中的静态主方法可以为你测试。也许这样的事情(我没有尝试编译它)。

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

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(); 
    } 
} 
0

我认为你在这里有点困惑的重要概念是什么类,方法和领域。字段定义数据。方法定义了应用于数据的行为(或导致其他影响)。类将具有行为(方法)的数据(字段)分组。类还执行封装,这使得我们可以将数据和方法隐藏到特定的类中,只有该类所属的包可以使用(这是默认的),或者可以被任何其他类公开使用。

在这种情况下,你真的只需要一个类。你可以让主要方法完成大部分工作。您还可以保留您为设置字段值和打印到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); 

    } 
} 
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类。