有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

for语句中的java索引超出范围

我在运行时遇到一个错误:“索引数组超出范围”,但我找不到位置。该程序假设取25个随机数,将它们分成偶数和奇数,并显示单独的组。我调试了第一个语句,这很好,这是我的第二个语句,但我不知道为什么。两个数组元素不能相等吗

public class EvensandOdds {



 public static void main(String[] args)  {

    int i;
    int countEven = 0;
    int countOdd = 0;
    int num;
    int numEven = 0;
    int numOdd = 0;
    int [] evenNum;
    int [] oddNum;
    int [] ranNum = new int[25];


    for (i = 0; i <= 24; i++) {
        num = (int) (100 * Math.random());
        ranNum[i] = num;
        if (num % 2 == 0) {
            numEven += 1;
        } else numOdd += 1;
    }

    evenNum = new int[numEven];
    oddNum = new int [numOdd];

    for (i = 0; i <= 24; i++) {
        if (ranNum[i] % 2 == 0) {
            evenNum[countEven] = ranNum[i]; //This separates the two groups into different arrays. Is this a valid statement?
            countEven += 1;
        } else oddNum[countOdd] = ranNum[i];
        countOdd += 1;
    }

    System.out.print("Your even numbers are: \n");
    for (i = 0; i <= countEven; i++) {
        System.out.print(evenNum[i]);
    }

    System.out.print("Your odd numbers are: \n");
    for (i = 0; i <= countOdd; i++) {
        System.out.print(oddNum[i]);
    }



 }
}

共 (3) 个答案

  1. # 1 楼答案

    1. countOdd += 1对偶数和奇数都执行,请尝试更改以下行:

      } else oddNum[countOdd] = ranNum[i];
       countOdd += 1;
      

      进入:

      } else { 
          oddNum[countOdd] = ranNum[i];
          countOdd += 1; 
      }
      
    2. 更改(如Lion建议的)

      for (i = 0; i <= countEven; i++) {
      

      for (i = 0; i <= countOdd; i++) {
      

      进入

      for (i = 0; i < countEven; i++) {
      

      for (i = 0; i < countOdd; i++) {
      
  2. # 2 楼答案

    oddNum数组长度为8。。。但使用较大的countOdd,这会导致第行出现异常:

    oddNum[countOdd] = ranNum[i];
    

    导致此问题的原因是countOdd+=1;不包含在括号内,如:

    else addNum[countOdd++] = ranNum[i];
    
  3. # 3 楼答案

    countOdd += 1;语句不在一对大括号内,因此即使数字为偶数,也会执行它

    } else { 
        oddNum[countOdd] = ranNum[i];
        countOdd += 1; 
    }
    

    这将解决您的错误