Java数组索引超出范围异常无论数组长度如何

时间:2013-10-24 00:31:00

标签: java arrays

package helloworld;
public class windspeed {

    public static void main(String args[]) {
        int t = Integer.parseInt(args[44]); //this is the array input for temperature
        int v = Integer.parseInt(args[15]); //this is the array input for wind speed
        double x = Math.pow(v, 0.16); //this is the exponent math for the end of the equation
        if (t < 0) {
            t = t*(-1); //this is the absolute value for temperature
        }
        double w = (35.74 + 0.6215*t)+((0.4275*t - 35.75)* x); //this is the actual calculation
        if (t<=50 && v>3 && v<120) { //this is so the code runs only when the equation works
            System.out.println(w);
        }
        if (t>50 || v<3 || v>120){
            System.out.println("The wind chill equation doesn't work with these inputs, try again.");
        }

    }
}

这给了我一个ArrayIndexOutOfBounds错误。我在[]放入的内容并不重要我收到错误...为什么?我该如何解决?

5 个答案:

答案 0 :(得分:0)

原因是

int t = Integer.parseInt(args[44]);

你有45个参数吗?

答案 1 :(得分:0)

这里的问题是你创建数组的方式:

int t = Integer.parseInt(args[44]); //this is the array input for temperature
int v = Integer.parseInt(args[15]); //this is the array input for wind speed  

args指的是传递给程序的main()方法的命令行参数。如果你尝试在没有45个参数时解析args[44](0索引,记得吗?),你最终会将null分配给你的数组。

所以,你后来最终得到的只是ArrayIndexOutOfBoundsException因为你不能索引一个空数组。

int t[] = new int[44]; // please notice the brackets
int v[] = new int[15]; //this is the array input for wind speed  

如果您需要的只是尺寸

,上述方法就足够了
  1. Java中的数组是int[] tint t[]。他们中的任何一个都会做,但括号需要在那里。
  2. 使用Math.abs()查找绝对值。为您节省if()

答案 2 :(得分:0)

int t = Integer.parseInt(args[44]); //this is the array input for temperature
int v = Integer.parseInt(args[15]); //this is the array input for wind speed

args,即args是main方法的命令行参数。你是否在args内有45个元素,如果不是它会抛出ArrayIndexOutOfBounds

要知道长度,请使用:

args.length

比你可以继续。希望能帮助到你。

答案 3 :(得分:-1)

在这些方面:

int t = Integer.parseInt(args[44]); //this is the array input for temperature
int v = Integer.parseInt(args[15]); //this is the array input for wind speed

你说你用至少45个参数运行程序!!其中15位是风速,44位是温度。

您可能正在使用NO参数运行程序或使用一个参数。

请注意,如果您使用参数运行程序:“hello world how are you”该程序将具有大小为5的args,hello中的args[0]world中的args[1]等等。

答案 4 :(得分:-1)

你现在拥有的是: - 取第15个命令行参数并转换为Integer; - 获取第44个命令行参数并将其转换为Integer。 你确定它是你需要的吗?