如何在没有.length的情况下找出数组的长度

时间:2016-10-17 19:49:00

标签: java arrays

我必须找出一个char数组有多长。 我不能使用.length因为它不被允许。 你能帮我么??? 错误:对于参数类型char,null

,运算符!=未定义

我喜欢这样......

  public void len(){
        int i=0;
        while(i>0){
            if (Array[i] != null) {
                System.out.println("not null");

            }
            else{
                System.out.println(i);
            }           
    }
    }

6 个答案:

答案 0 :(得分:4)

即使不允许使用.length字段来访问数组的长度也没有意义。我想你一定是误解了什么。

无论如何,这里有一个"脏"获得长度的方法:

public static <T> int lengthOfArray(T[] array) {
    int count = 0;
    while (true) {
        try {
            T t = array[count];
        } catch (ArrayIndexOutOfBoundsException e) {
            return count;
        }
        count++;
    }
}

请注意,您需要使用Character[]而不是char[]

请不要在生产代码中使用它!

答案 1 :(得分:1)

这只是另一种方法,这是一个使用List接口然后从那里获取数据的小技巧,我不知道它是否被允许并且肯定不是最好的方法。

public static <T> int len(T[] array) {
    return Arrays.asList(array).size();
}

请记住,您无法将基本类型数组传递给此函数。

答案 2 :(得分:0)

顺便说一下,你的程序实际上什么也没做,因为我永远不会优于0,在这里你去,这是最简单的方法:

public void len(){
    end = false;
    for(int i = 0; !end; i++){
        try{
            char c = Array [i];
            System.out.println("not null : " + i);
        }
        catch (ArrayIndexOutOfBoundsException){
            System.out.println("End of the array");
            end = true;
        }
    }
}

答案 3 :(得分:0)

int length = java.lang.reflect.Array.getLength(array);

答案 4 :(得分:0)

访问不存在的数组元素不会计算为null,它会抛出异常,因此您无法将其与null进行比较。这是一个通过测试异常来查找长度并使用二进制搜索最小化测试次数的解决方案:

static int getArrayLengthStupidWay(Object array) {
    int low = 0, high = Integer.MAX_VALUE;
    while (low != high) {
        int mid = (low + high) >>> 1;
        try {
            java.lang.reflect.Array.get(array, mid);
            low = mid + 1;
        } catch (ArrayIndexOutOfBoundsException ex) {
            high = mid;
        }
    }
    return low;
}

答案 5 :(得分:-1)

什么是字符链?

int lenght = new String(charArray).size();