2013-02-28 36 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); 
    } 
    } 
} 
}