无法从java中的ArrayList获取元素

时间:2012-11-20 10:20:27

标签: java arraylist multidimensional-array

while循环遍历一个字符串,一次接收8个字符的子字符串,为每个字符获取ASCII代码并将每个字节转换为其二进制表示,每8个字符为8个字符(8 * 8)数组,这里是代码:

消息文件包含: 1234567800000008

因此while循环运行两次,因为有16个字符,代码正确运行,直到二进制值在最后一个for循环的输入块中输入。当我在arraylist中添加输入块时,当我再次从araylist中获取它们时,它们不是相同的值

        while(Message.length() != 0){
            substr=Message.substring(0, 8);
            bytes = substr.getBytes("ASCII");
            int[][] inputblock = new int[bytes.length][bytes.length];

                for(int i=0; i<bytes.length;i++){
                    binString =Integer.toBinaryString(bytes[i]);

                        while (binString.length() < 8) {binString = "0" + binString;}

                      for(int j=0; j<bytes.length;j++){
                           int x=Character.digit(binString.charAt(j), 2);
                                inputblock[i][j] = x;

                            }
                          }     
             input.add(inputblock);  //// This is supposed to add each 64 bit (8*8) 
          Message=Message.replace(substr, "");        //Array to arraylist input. 
    System.out.print(substr + "+");


    }

出于某种原因,当我来打印arraylist的内容时,它打印出的不是二进制表示的实际字符..我不知道为什么?

输出最有效的

for (int i =0;i<input.size();i++){
     int[][] tmp = input.get(i);

     for(int j=0;j<input.size();j++){
         System.out.print(tmp[i][j]); }
       System.out.print("\n");
    }

输出: 12345678 + 00000008 + 00 00

2 个答案:

答案 0 :(得分:0)

你在问题​​中提到“从ArrayList中获取元素”,但我看不到你在input任何地方读取(假设在这种情况下是列表)。

打印出的值始终为substr,后跟文字+字符,因为这是您要求程序打印出来的唯一内容(在while循环的最后一行)。 substr的值在循环开始时设置为八个实际字符,因此这种行为似乎是合适的。

如果您要打印出二进制值,则需要将input转换为您所使用的任何格式的字符串,并将 传递给{{1} }。


编辑以及您如何显示相关输出的额外信息,您的System.out.println()打印方法存在错误。

您将两个循环声明为:

input

(和for(int i=0;i<input.size();i++) 相同)。因此,两个计数器变量从0变为j - 即2,因为有2个字符。结果,您打印出前两个字节的前两位 - input.size00

你应该做什么AIUI正在00数组的两个维度上完全迭代:

tmp

答案 1 :(得分:0)

除了以下代码外,一切都很好......

for (int i =0;i<input.size();i++){
     int[][] tmp = input.get(i);

     for(int j=0;j<input.size();j++){
         System.out.print(tmp[i][j]); }
       System.out.print("\n");
}

使用以下代码替换此代码......

for (int[][] tmp :input.size();){

    for(int i=0; i< tmp.length; i++)
        for(int j=0;j<tmp.length;j++){
            System.out.print(tmp[i][j]); 
        }
       System.out.print("\n");
    }
}

其他一切都是正确的