如何在'for-loop'

时间:2018-04-05 10:04:07

标签: java arrays string loops increment

在过去的两个小时里,我一直在试图弄清楚我的代码出了什么问题。它应该是加密系统的小型私钥的强力算法;

public static char[] Increment(char[] a, int b, char c) {
    if (a[b] < c)
        a[b] += 1;
    else if ((b) > 0) {
        a[b] = '0';
        Increment(a, b-1, c);
    }
    return a;
} 

public static BigInteger StringLayer(char[] str, char[] a) {

    int index = 0;
    for (int i = 0; i < str.length; i++) {
        if (str[i] == '-') {
            str[i] = a[index];
            index++;
        }
    }
    return new BigInteger(new String(str));
}


public static void main(String[] args) {

    char[] Store = {'0', '0', '0', '0'};

    char[] ab1 = {'4', '-', '-', '7', '8', '-', '3', '0', '-'};

    for (int i = 0; i < 10000; i++) {

        Store = Increment(Store, Store.length - 1, '9');
        System.out.println(Store);
        System.out.println(StringLayer(ab1, Store));
    }

输出的摘录如下;

0001

400780301

0002

400780301

0003

400780301

我不知道为什么增加的Store变量(在输出上似乎正在增加)在传递给StringLayer方法时以某种方式不会增加。我确信答案非常简单,我错过了一些我应该100%知道的东西,但我老老实实地感到难过,并且会感激任何帮助。

1 个答案:

答案 0 :(得分:0)

答案很简单但很棘手。当您通过ab1方法传递参考时,通过替换所有StringLayer修改原始数组。因此,在第一次调用后,-数组中不再有-。为了防止这种情况,您应该在处理数组之前创建该数组的副本:

ab1