java 中使用数组的前缀

Prefixes using array in java

我正在编写一种方法,该方法将一个整数数组和 returns 另一个字符串数组作为输入,每个字符串表示输入数组的一个非空前缀。例如,如果输入 数组是:

<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;
}

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

你的代码有一些问题

这一行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;
}

您还可以使用字符串的 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;
}

注意:搜索字符串与 StringBuilder