2013-02-28 64 views
1

此程序的目標是運行參數(如「K6V3 20.2 17.4」),並根據最後2個數字參數使用Weather類來計算windchill,並使用第一個參數作爲該區域的簡寫名稱。當程序給出三個倍數的參數時,我遇到了一個問題,比如「K6V3 20.2 17.4 KCHO 40.0 10.0」我不確定如何讓循環在第三個參數後重新啓動。我的程序將採用前三個參數並顯示正確的信息,但它會重複第三個參數的信息。以下是我的代碼,HELP!?!?!無法將參數循環乘以三的倍數。 (newb)

public class ChillMapper { 
    public static void main(String args[]) { 
     double ICAO; 
     double t; 
     double v; 
     double windChill; 

     for (int i = 0; i < args.length/3; i++) { 
      if (args.length % 3 == 0) { 
       ICAO = Text.toDouble(args[0]); 
       t = Text.toDouble(args[1]); 
       v = Text.toDouble(args[2]); 
       windChill = Weather.windChillNA(t, v); 
       Map.setTemperature(args[i], windChill); 
      } 
     } 
    } 
} 

回答

3

這可能是簡單的這種方式編寫循環:

for (int i = 0; i < args.length; i+=3) 
{ 
    ICAO = Text.toDouble(args[i+0]); 
    t = Text.toDouble(args[i+1]); 
    v = Text.toDouble(args[i+2]); 
    windChill = Weather.windChillNA(t,v); 
    Map.setTemperature(ICAO,windChill); 
} 

而不是檢查,如果i%3==0每一次,你用的3步跳(你最好有一些檢查,該參數長度本身是倍數 3,我把這個留給你作爲練習)。然後你分別在索引i,i + 1,i + 2處得到參數。

+0

通過檢查參數長度是3是什麼意思?這不是我的言論所做的嗎? – 2013-02-28 00:25:47

+0

如果使用錯誤的參數數量來調用程序,例如「K6V3 20.2 17.4 KCHO 40.0」(5個參數) – 2013-02-28 00:32:13

+0

,那麼只是爲了保護您自己的「超出界限例外」。非常感謝! – 2013-02-28 00:36:05

0

你有硬編碼的數組索引。使用變量'i'代替:

public class ChillMapper 
{ 
public static void main(String args[]) 
{ 
    double ICAO; 
    double t; 
    double v; 
    double windChill; 

    int i = 0; 
    if (args.length % 3 == 0) 
    { 
     while (i < args.length) 
     { 
     ICAO = Text.toDouble(args[i]); 
     t = Text.toDouble(args[++i]); 
     v = Text.toDouble(args[++i]); 
     windChill = Weather.windChillNA(t,v); 
     Map.setTemperature(args[i],windChill); 
    } 
    } 
} 
}