【问题标题】:How to resolve the error in the following code如何解决以下代码中的错误
【发布时间】:2014-03-11 11:03:24
【问题描述】:

我已经写了这段代码来生成对应于字符串a的比特流然后反转 位流中的特定位。变量cc在代码sn-p之前的处理中得到一个整数值。

但是它在下一行给出了数组索引越界异常。

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

【问题讨论】:

  • 看不懂这一行 cc=cc+nv11; , 什么是 cc & nv11
  • 需要更多代码。 cc 是如何实例化、操作和计算的?

标签: java string stringbuilder bitstream


【解决方案1】:

在调用之前,您没有在 sb2 变量中添加任何内容

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

无论cc 的值是多少,它都超过了sb2.length() 的大小。

【讨论】:

  • 我正在编辑代码以回答您提出的问题。希望对您有所帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多