有 Java 编程相关的问题?

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

java中使用数组的前缀

我正在编写一个方法,它接受一个整数数组作为输入,并返回另一个字符串数组,每个字符串表示输入数组的非空前缀。例如,如果输入 数组是:

<;3、1、4>

然后字符串值的输出或返回数组应为:

<;“[3],”[3,1],“[3,1,4]”>

我的代码中有一个错误,我似乎找不到

public static String[] getAllPrefixes(int[] numbers) {
    String[] result = null;
    String[] arr = new String[numbers.length];   
    String seq = "" + numbers[0];
        
    for (int i = 0; i < numbers.length; i++) {  
        arr [i] = "[" + seq + "]";  
        seq += ", " + numbers [i + 1];
    }
    
    result = arr;   
    return result;
}


共 (2) 个答案

  1. # 1 楼答案

    你的代码有一些问题

    在这一行seq += ", " + numbers [i + 1];当循环位于最后一项时i+1将超出索引

    初始化seq时,您在数组中添加了第一个项,因此在循环中,您应该忽略该项,并从i=1开始,您还应该在arr数组中添加该项,在循环中,您应该首先更新req,然后添加到arr,因此最终代码如下所示

    public static String[] getAllPrefixes(int[] numbers) {
        String[] result = new String[numbers.length];
        String seq = "" + numbers[0];
        result[0] = "[" + seq + "]";
    
        for (int i = 1; i < numbers.length; i++) {
            seq += ", " + numbers[i];
            result[i] = "[" + seq + "]";
        }
        return result;
    }
    

    您还可以使用string的StringBuilder实例进行追加,代码如下

    public static String[] getAllPrefixes(int[] numbers) {
        String[] result = new String[numbers.length];
        StringBuilder seq = new StringBuilder("" + numbers[0]);
        result[0] = "[" + seq + "]";
    
        for (int i = 1; i < numbers.length; i++) {
            seq.append(", ").append(numbers[i]);
            result[i] = "[" + seq + "]";
        }
        return result;
    }
    

    注意:搜索字符串vs StringBuilder

  2. # 2 楼答案

    你一定得到了ArrayIndexOutOfBoundException,这是因为seq += ", " + numbers[i + 1]行。 例如,假设数字数组的长度是3,那么For循环将一直运行到i=2。在这种情况下,你的numbers[i+1]将是numbers[3],它不存在,并且会给出一个异常