数组索引超出界限,不确定发生了什么(JAVA)

时间:2013-08-02 17:30:42

标签: java

嗨,大家好我正在研究任何一段中的anagram探测器。

我有一个数组索引超出范围异常的问题,我很确定数组位置及其内存位置是运行时生成的,没有用户的干扰。

import java.util.*;
import java.util.Random;
class never {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System. in );
        int[] array1 = new int[100];
        int[] checker = {
            121, 97, 104, 101, 97, 100, 104, 105, 109, 63, 32
        };
        String input = scan.nextLine();
        String str = input.toLowerCase();
        String str1 = input.replaceAll("\\W", " ");
        String[] name1 = new String[5000];
        name1 = str1.split(" ");
        int length = name1.length;
        System.out.println(length);
        for (int i = 0; i < length; i++) {
            if (name1[i] == " ") {
                name1[i] = name1[i + 1];
            }
        }
        for (int i = 0; i < length; i++) {
            for (int j = i + 1; j < length; j++) {
                Boolean s1 = name1[i].equals(name1[j]);
                if (s1 == true) {
                    name1[j] = " ";
                }
                if (name1[i] == " ") {
                    name1[i] = name1[j];
                    name1[j] = " ";
                }
            }
        }
        length = name1.length;
        System.out.println(length);
        for (int i = 0; i < length; i++) {
            for (int j = 0; j < name1[i].length(); j++) {
                char charz = name1[i].charAt(j);
                int iz = (int) charz;
                for (int k = 0; k < 11; k++) {
                    if (iz == checker[k]) {
                        length--;
                    }
                }
            }
        }
        System.out.println(length);
        for (int i = 0; i < length; i++) //Problem lies here
        {
            name1[i] = name1[i].toLowerCase();
        }
        for (int i = 0; i < length; i++) {
            for (int j = i + 1; j < length; j++) {
                int counter = 0;
                char[] arr1 = name1[i].toCharArray();
                char[] arr2 = name1[j].toCharArray();
                java.util.Arrays.sort(arr1);
                java.util.Arrays.sort(arr2);
                int arraylen;
                if (arr1.length != arr2.length) {
                    continue;
                } else arraylen = arr1.length;
                for (int k = 0; k < arraylen; k++) {
                    if (arr1[i] == arr2[i]) {
                        counter = counter + 1;
                        if (counter == arraylen) {
                            System.out.println(name1[i] + "  " + name1[j]);
                        }
                    }
                }
            }
        }
    }

}

1 个答案:

答案 0 :(得分:0)

索引越界异常意味着您正在尝试访问不存在的索引。

假设您有一个包含9个元素的数组。 array [9]将是第10个,它不会存在。