2012-02-13 42 views
0

我是一個在我的第一個編程模塊開始的學生。我正在從事的課本是'Java for Everyone',Cay Horstmann。我在第2.4章 - 常量。我已經直接從本書複製並檢查了代碼(超過15次!),但每次編譯時都會產生編譯錯誤in已經在main(java.lang.String [])中定義。--- in已經在main(java.lang.String [])中定義---錯誤消息驅動ME MAD

它突出顯示Scanner in = new Scanner(System.in);作爲問題。我寫了另一個非常簡單的程序,其中還包括Scanner in = new Scanner(System.in);和我有完全相同的問題。

我試圖找到解決方案,我已經重新安裝Java JDK和BlueJ(編譯器),但沒有任何工作。我搜索了這個問題,但我無法找到任何符合我的問題的東西。我是一個Java處女,所以說實話,我很難找出我應該尋找的地方。

任何幫助將不勝感激。我已經落後了幾個星期,這使我的進步大大提高。

非常感謝您提供的任何建議。

所有最好的,

維基

import java.util.Scanner; 

public class Volume2 
{ 

    public static void main(String[] args) 
    { 

     final double BOTTLE_VOLUME = 2; 
     final double LITRES_PER_OUNCE = 0.0296; 
     final double CAN_VOLUME = 12 * LITRES_PER_OUNCE; 

     System.out.print("Please enter quantity of bottles: "); 

     Scanner in = new Scanner(System.in); 

     int bottles = in.nextInt(); 

     double totalVolume = totalVolume * BOTTLE_VOLUME; 

     System.out.print("Please enter the number of cans: "); 

     **Scanner in = new Scanner(System.in);** // This is highlighted as being the problem 

     int cans = in.nextInt(); 

     double additionalVolume = cans * CAN_VOLUME; 

     totalVolume = totalVolume + additionalVolume; 

     System.out.print("The total volume is: "); 
     System.out.println(totalVolume); 

    } 
} 

錯誤消息:在主已經被定義(java.lang.String中[])


回答

2
Scanner in = new Scanner(System.in); // FIRST ONE HERE 

int bottles = in.nextInt(); 
double totalVolume = totalVolume * BOTTLE_VOLUME; 
System.out.print("Please enter the number of cans: "); 

Scanner in = new Scanner(System.in); // SECOND ONE HERE 

看看那段代碼。你真的是試圖創建in的兩個副本,正如錯誤消息所示。

在你想重用一個變量正常情況下,您只需將分配給它的第二次,如用:

int xyzzy = 42;    // Create it here. 
doSomethingWith (xyzzy); 
xyzzy = 314159;    // NOTE: no "int" here, simple reuse. 
doSomethingWith (xyzzy); 

但是,你的情況,這並不適用,你只需簡單地聲明變量兩次。

因此,訂閱「儘可能晚地創造變量」的哲學,我會擺脫第一個,這是不需要的。你可以擺脫第二,但上述哲學已經很好地服務於我,確保創建和使用的對象是本地化的。

+0

謝謝大家的快速回復。我不明白我在做什麼。我已經刪除了第二臺掃描儀,並編輯了totalVolume,它工作。我只能認爲,許多小時的學習改變了我的大腦功能!再次感謝 :) – user1205882 2012-02-13 11:52:28

3

所以錯誤信息是完全正確的 - 你已經有了一些名爲的東西之前的行與錯誤的幾行。在你的具體情況下,只需刪除第二個聲明,因爲它沒有任何用處。

2

錯誤消息非常明確:您已經在main()中聲明瞭名爲in的變量。實際上,聲明是相同的,這意味着第二個是不必要的。刪除違規行,後面的代碼仍然可以從第一次聲明中受益;一切都會正常工作。

您只需要一個Scanner來閱讀System.in - 一旦您創建了一個,您不需要創建另一個;只是不斷重複使用你已經做的。