2011-02-23 43 views
3

我想使用命令行參數來獲取用戶輸入,並使用增強for循環來求和。java中的CommandLine參數幫助

這是錯誤:

在線程異常「主要」 java.lang.Error的:未解決的問題,編譯: 類型不匹配:不能從雙轉換爲int

public class EnhanceForLoop { 


public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    if(args.length !=5) 
     System.out.println(" please enter no more than 4 numbers"); 
    else 
    { 

    double sum; 
    double arrayLength = Double.parseDouble(args[0]); 
    double [] myArray = new double [ arrayLength ]; 

    double value = Double.parseDouble((args[1])); 
    double counter = Double.parseDouble((args[2])); 


    for(double num: myArray) 
     sum += num; 


    System.out.printf("The sum is %f ", sum); 

    } 

} 

} 

這裏是怎麼回事是迄今爲止:

公共類EnhanceForLoop {

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    if(args.length !=5) 
     System.out.println(" please enter no more than 4 numbers"); 
    else 
    { 

    double sum = 0.0; 

    int arrayLength = Integer.parseInt(args[0]); 
    double [] myArray = new double [ arrayLength ]; 

    double num1 = Double.parseDouble((args[1])); 
    double num2 = Double.parseDouble((args[2])); 
    double num3 = Double.parseDouble((args[3])); 
    double num4 = Double.parseDouble((args[4])); 
    double num5 = Double.parseDouble((args[5])); 


    for(double num: myArray) 
     sum += num; 


    System.out.printf("The sum is %f ", sum); 

    } 

} 

}


下面是答案:

公共類EnhanceForLoop {

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    if(args.length !=5) 
     System.out.println(" please enter no more than 4 numbers"); 
    else 
    { 

    double sum = 0.0; 

    int arrayLength = Integer.parseInt(args[0]); 
    double [] myArray = new double [ arrayLength ]; 

    double num1 = Double.parseDouble((args[1])); 
    double num2 = Double.parseDouble((args[2])); 
    double num3 = Double.parseDouble((args[3])); 
    double num4 = Double.parseDouble((args[4])); 



    for(String s: args){ 
     sum += Double.parseDouble(s); 
    } 
     System.out.println("Sum: "+sum); 
    } 




} 

}


+0

除非arrayLength是一個整數,否則不能用'new double [arrayLength]'創建一個數組。 – 2011-02-23 23:00:32

+0

所以,現在你可以從你的解決方案中刪除多餘的代碼,除了循環和其後的'System.out.println'之外的其他東西。 – 2011-02-24 01:32:49

回答

2

您正在總結一個填充了0.0(因爲這是默認值)的數組,而不是命令行參數。

如果你想總結參數,你必須迭代它們(= args數組),將每個參數轉換爲一個double,然後將它們相加。你根本不需要double[]


編輯:(一些意見後)

在你的問題中的示例代碼您使用的是增強的for循環數組,這樣看來,你知道這樣的循環是什麼。所以,現在在那裏使用args而不是你的myArray。在循環內部,執行Integer.parseInt(...)Double.parseDouble或類似操作,然後將結果添加到sum變量中。

如果循環中需要多條語句,請使用{ ... }對它們進行分組。

+0

[code] public static void main(String [] args) { \t \t \t \t int sum; \t \t \t \t int num1 = Integer.parseInt(args [0]); \t \t \t \t \t \t \t INT \t NUM2 =的Integer.parseInt(參數[1]); \t \t \t \t sum = num1 + num2; \t \t \t \t System.out.printf(「總和是%d」,總和); \t \t \t \t \t} } [/代碼] – Mugetsu 2011-02-23 23:49:22

+0

@Mugetsu:**不要在評論中添加代碼**(不可讀這裏)**,把它添加到你的問題** (如果需要了解它) - 它有一個編輯鏈接。 – 2011-02-23 23:58:42

+0

我應該使用增強循環來總結數字,我知道如何做,當我存儲的數字,如:\t \t'code'int sum; \t \t \t \t int num1 = Integer.parseInt(args [0]); \t \t \t \t \t \t \t INT \t NUM2 =的Integer.parseInt(參數[1]); \t \t \t \t sum = num1 + num2; \t \t \t \t System.out.printf(「總和是%d」,總和); – Mugetsu 2011-02-23 23:59:32

4

arrayLength必須是整數。因此

int arrayLength = Integer.parseInt(args[0]); 
double [] myArray = new double [ arrayLength ]; 
+0

在這一行中:double [] myArray = new double [arrayLength]; 數組的構造函數只接受ints作爲參數。 把它轉換爲int – hooch 2011-02-23 23:01:17

+0

謝謝,我解決了,但不幸的是出現了另一個問題:當我編譯的總和是0.000000 – Mugetsu 2011-02-23 23:17:30

3

同樣重要的是要記住想想你的代碼的流程:

您初始化數組。 您對數組中的值進行求和。

您從未將值添加到數組中,所以您將總是對一堆零進行求和。

+0

你能幫我添加增強循環 – Mugetsu 2011-02-24 00:46:07