2013-04-24 127 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類。