【问题标题】:How to calculate a length of array with out using library如何在不使用库的情况下计算数组的长度
【发布时间】:2015-06-09 07:27:41
【问题描述】:

昨天面试,面试官告诉我写一个计算数组长度的代码,不用Array类的length属性。

例如-

char[] array=new Scanner(System.in).nextLine().toCharArray();
// i have to write a code for calculating length of this array
//I can use any operator but use of library is restricted

here 给出的所有答案都使用字符串库。

【问题讨论】:

  • 在像c 这样的语言中,我们使用while 循环将其与换行符\n 匹配以中断,但如何处理对象。
  • 使用 try catch 直到得到 ArrayIndexOutOfBounds 异常?
  • @Gosu。赞赏是的,我也试过这个,但这不是一个很好的编码风格来确定异常结果。
  • 我希望有更好的方法来做到这一点(try/catch 看起来确实很愚蠢)。
  • @gosu Array 类如何评估其长度属性?因为这个 .class 文件在 src 中不可用?

标签: java arrays string string-length


【解决方案1】:

更好的解决方案可能是使用该方法:java.lang.reflect.Array::getLength

例如:

import java.lang.reflect.Array;

public class ArrayLength {
    public static void main(String[] args) {
        char[] array = new char[]{'a', 'b', 'a', 'c'};
        System.err.println(Array.getLength(array));
    }

}

【讨论】:

  • 由于我不知道反射,你能否给我看一段如何使用反射 API 的代码。
  • @dubey-theHarcourtians 我添加了一个小例子
  • 很高兴知道reflection API,但从答案的角度来看,这是没有意义的,因为 API 受到限制。
  • API 受限?
【解决方案2】:
char[] array = new Scanner(System.in).nextLine().toCharArray();
int count = 0;
for (int i : array) {
    count++;
}
System.out.println(count);

【讨论】:

  • 幼稚....太棒了for each loop 是这个问题的最简单解决方案。非常有趣。为什么到目前为止这对我们不严格,干得好。
  • 在这种情况下:length 属性用于字节码级别:arraylength
  • @gontard 感谢您提供此类信息,但应该预料到这是由 jdk 而不是我们完成的。
  • @dubey-theHarcourtians 是的,我猜。
【解决方案3】:

试试这个:

    char []c = {'a', 'b', 'c'};
    int i = 0;
    int l = 0;
    try{
    while(c[i++] != 0)
    {
        System.out.println(c[i-1]);
        l++;
    }
    }catch(Exception a)
    {};
    System.out.println(l);

【讨论】:

    【解决方案4】:

    根据我在 cmets 中的建议,这绝对不是一个好习惯。

    import java.util.Scanner;
    
    public class QuickTester {
    
        public static void main(String[] args) {
    
            Scanner sc = new Scanner(System.in);
    
            System.out.print("Enter something: ");
            char [] charArr = sc.nextLine().toCharArray();
    
            int i = 0;
            try {
                while(true) {
                    char c = charArr[i++];
                }
            }
            catch (ArrayIndexOutOfBoundsException e) {
    
            }
    
            System.out.println("Length: " + (i-1));
        }
    }
    

    输出:

    Enter something: Banana
    Length: 6
    

    【讨论】:

    • 不好的做法是不使用长度属性。这个面试官的问题很愚蠢。
    • @gontard 有时他们只是想提出一些技巧问题?我的意思是,毕竟没有长度属性也不是不可能找到长度。
    • @gontard 面试官永远不会傻,我想他是想知道你能想到什么高度,想法不是获得编码透视的代码。这是对开箱即用的思考的测试。
    • 我并没有说面试官很愚蠢,只是它的问题......我认为这种问题对招聘一个好的开发人员没有帮助。
    猜你喜欢
    • 2020-11-07
    • 1970-01-01
    • 2022-01-13
    • 2018-03-21
    • 2021-03-25
    • 2019-04-02
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多