0

我编写了这段代码来生成与字符串 a 对应的位流,然后反转位流中的特定位。变量 cc 在代码片段之前的处理中获取一个整数值。

但是,它在下一行给出了 Array Index Out Of Bounds 异常。

if(sb2.charAt(cc)=='1')

谁能告诉我可能的原因是什么?

package abc1;

import java.util.Scanner;

public class abc2 {

    public static void main(String s[]) {
        String seckey = " ";
        String cbs = " ";
        String a = "Manikaparasher";
        System.out.println("String originally:" + a);
        char[] car = a.toCharArray();
        StringBuilder sb = new StringBuilder();
        for (char c : car) {
            cbs = Integer.toBinaryString((int) c);
            sb.append(cbs);
        }
        Scanner sc = new Scanner(System.in);
        System.out.println(" Enter your passkey ");

        int n = sc.nextInt();
        int ul, ll;
        double nv1, nv2, ns;
        ll = n * 3;
        ul = n * 7;
        nv1 = ll + (Math.random() * (ul - ll));
        nv2 = ll + (Math.random() * (ul - ll));
        int nv11 = (int) nv1 % 7; //inversion bit
        int nv22 = (int) nv2 % 3; //embedding bit
        ns = ll + (Math.random() * (ul - ll));
        int ns1 = (int) ns % 5;//start bit
        if (nv11 == nv22) {
            nv11++;
        }
        if (nv22 == ns) {
            ns++;
        }
        if (nv11 == ns) {
            nv11++;
        }

        seckey = "I" + nv11 + "E" + nv22 + "S" + ns1;
        System.out.println(seckey);
        System.out.println("old" + sb.toString());
        System.out.println("nv11" + nv11);
        StringBuilder sb2 = new StringBuilder(sb);
        int cc = 0;
        while (!cbs.isEmpty()) {
            cc = cc + nv11;
            if (sb2.charAt(cc) == '1') {
                sb2.setCharAt(cc, '0');
                sb2.append(sb);
            } else {
                sb2.setCharAt(cc, '1');
                sb2.append(sb);
            }
        }

        System.out.println("new" + sb2.toString());
    }
}
4

1 回答 1

0

在调用之前你没有在sb2变量中放入任何东西

if(sb2.charAt(cc)=='1')

无论cc价值如何,它都超过了sb2.length()大小。

于 2014-03-11T11:09:04.833 回答