2014-10-21 41 views
0

我一直在使用此代碼嘗試OOP。我剛開始使用斯坦福大學的CS106A,並且由於它使用了ACM庫,所以語法可能有點偏離。Java不打印在不包含main的其他類中

所以,這裏是javadoc的,http://cs.stanford.edu/people/eroberts/jtf/javadoc/student/acm/program/ConsoleProgram.html

我使用的是名爲 「iTunes的」 和 「測試」 兩班。 「test」是包含「main」的類,但在這裏它使用「run」方法,這與「main」方法類似。

一流的, 「測試」

import acm.program.ConsoleProgram; 

public class test extends ConsoleProgram{ 
    public void run(){ 

     itunes song1=new itunes("acdc",1991); 
     song1.displaySong(); 

    } 
} 

二等功, 「iTunes」 的

import acm.program.ConsoleProgram; 

public class itunes extends ConsoleProgram { 
    private static String name; 
    private static int year; 

    public itunes(String name1,int year1){ 
     name = name1; 
     year = year1; 
    } 

    public void displaySong(){ 
     println(name); 
     println(year); 

    } 
} 

它編譯沒有錯誤,但沒有出現在控制檯上。空白。 但是,如果我返回這些值運行,然後在運行內顯示它們,它的工作原理。任何想法,爲什麼發生這種情況?

此外,如果我想從一個函數返回字符串名稱和int年,我可以這樣做嗎?在那種情況下,返回類型是什麼?

+0

請向我們展示調用'run()'和'println()'定義的代碼。 – SamTebbs33 2014-10-21 21:49:38

+0

關於返回字符串和int:你可以創建一個包含一個String和一個int的數據類型。然後設置每個,然後返回該對象。 – 2014-10-21 21:54:18

+0

關於問題的第二部分,您可以直接訪問來自song1實例的字符串和int:song1.name和song1.year – Riadh 2014-10-21 21:55:34

回答

3

您的itunes Class也在擴展ConsoleProgram

這意味着,當您創建此類的實例時,將創建一個第二個控制檯,該類的輸出將轉到該控制檯。

因此,您所看到的輸出,如果你return值(它們由第一ConsoleProgram印刷,與您正在查看的第一個控制檯的工作。)

您應該切換控制檯視圖(假設月食),或者不要在主程序中創建第二個ConsoleProgram。看起來像一個普通班(不擴展ConsoleProgram)將滿足您的需求。


另外,如果我想從一個 單一功能同時返回的字符串名稱和INT的一年, 我能做到這一點?在那種情況下,返回類型是什麼?

有多種選擇:

  • 你可以爲每個返回值的特定位置返回List<Object>
  • 你可以在iTunes類使用私有屬性(和getter方法),ANS處理
  • 你可以創建自己的結果對象,包含所有需要返回參數輸入(itunes.getName(); itunes.getYear();)之後訪問您的結果。
  • 還有更多...
+0

感謝您的回答。是的,我正在使用eclipse。如何切換我的控制檯視圖? – user10678 2014-10-21 22:05:20

+0

@ user10678 http://www.codeaffine.com/wp-content/uploads/2014/07/select-console-dropdown.png - 點擊看起來像電腦屏幕上的文字的圖標。您也可以將eclipse配置爲自動切換到具有最新輸出的控制檯。 – dognose 2014-10-21 22:07:40

+0

@ user10678請參閱Titus Answer上的評論... IOConsole有點特別 - 但我認爲eclipse也應該處理它... – dognose 2014-10-21 22:17:48

1

ConsoleProgram類的println()方法不打印對象到標準輸出,它其打印到IOConsole其是java.awt.Container必須被加入到一個JFrameFrame。如果您想將這些值打印到控制檯,請改爲使用System.out.println(...)

回答你的第二個問題。要返回intString,您可以將該方法的返回類型設置爲Object[],但在這種情況下,您應該爲itunes類創建一些Getters和Setters。

+1

的確,'println()'的工作方式有所不同,請參閱http://www.oxfordmathcenter.com/drupal7/node/46 - 不確定在eclipse中是否可以切換控制檯視圖。 – dognose 2014-10-21 22:16:55

+0

你說得對。我嘗試了itunes類中的system.out.println,它工作。我很好奇你是如何計算出來的。希望知道我可以怎樣做,下一次我排除故障。 – user10678 2014-10-22 08:31:36

+0

@ user10678我已閱讀文檔。相關信息顯示在[IOConsole](http://cs.stanford.edu/people/eroberts/jtf/javadoc/student/acm/io/IOConsole.html)類描述中。 – Titus 2014-10-22 15:08:41

相關問題