转换为二进制 - 获取 IndexOutOfBoundsException

Posted

技术标签:

【中文标题】转换为二进制 - 获取 IndexOutOfBoundsException【英文标题】:Converting to binary - getting IndexOutOfBoundsException 【发布时间】:2016-05-24 05:27:42 【问题描述】:

下面是我正在编写的一些代码,我想我应该让自己成为一个二进制计算器,让我的生活更轻松一些。但是,当我运行它时,我收到一条错误消息,告诉我有一个Java.lang.StringIndexOutofBoundsException。我真的不知道如何解决它,因为据我所知,我所做的一切都是正确的:

private static void ten()

    Scanner scan = new Scanner(System.in);

    System.out.println("What number would you like to convert to binary?");
    System.out.print("Enter the integer here:  ");
    int x = scan.nextInt();

    String bon = Integer.toString(x , 2);

    int myArrays [ ] = new int [ 7 ];

    myArrays[0] = bon.charAt(0); 
    myArrays[1] = bon.charAt(1); 
    myArrays[2] = bon.charAt(2); 
    myArrays[3] = bon.charAt(3); 
    myArrays[4] = bon.charAt(4); 
    myArrays[5] = bon.charAt(5); 
    myArrays[6] = bon.charAt(6); 
    myArrays[7] = bon.charAt(7); 

    for (int i = 0; i < myArrays.length; i++)
    
        System.out.print(myArrays [ i ] + " ");
        int count = 0;
        count++;
        if (count == 10) 
            System.out.println();
            count = 0;
        
    


【问题讨论】:

您需要执行基本调试:阅读异常的堆栈跟踪,因为它准确地告诉您是哪一行导致了问题。然后,在该行之前添加一些System.out.println 语句,这样您就可以看到您的字符串和您尝试访问的索引。 我在这里有点困惑。有人说我应该增加我的数组,也有人说我应该减少我的数组。我该做什么? 完全摆脱数组。 并调试您自己的代码,这应该是您来这里之前应该做的第一件事 我已经尝试调试我的代码,但我遇到了完全不同的问题。如果数组的所有八个整数都被填充,我的数组会打印出“49”八次。我假设将打印数组,而不是其他东西。但现在有道理了,我会尝试自己做。感谢大家的帮助! 【参考方案1】:

根据您输入的数字,二进制字符串的长度会有所不同。如果输入 0 或 1,您将得到“0”或“1”。但是您的代码假定您的号码有 8 位。这意味着它只有在设置了第八位时才会起作用。

您似乎正在尝试打印由空格分隔的位,然后是新行。最好使用更直接的方法:

String b = Integer.toString(x, 2);
for (int idx = 0; idx < b.length(); ++idx) 
  System.out.print(b.charAt(idx));
  System.out.print(' ');

System.out.println();

【讨论】:

【参考方案2】:

好的,所以你有一个大小为 7 的数组,它只给你 0-6,但是你调用了 array[7],所以你的数组大小增加了一个

【讨论】:

我认为数组从元素“0”开始? 您对数组大小是正确的(应该是数组[8])。然而,这不是他得到 IndexOutOfBoundsException 的地方——它在代码行:myArrays[3] = bon.charAt(3);【参考方案3】:

myArrays 是一个 7 元素的 len 数组,如果您执行从 0 到 7 的操作,您将超出限制..

尝试从 0 到 6!

【讨论】:

【参考方案4】:

您的数组大小需要更大... int myArrays [ ] = new int [ 8 ];

【讨论】:

【参考方案5】:

您的代码中有两点需要注意:

1.

int myArrays [] = new int [7];

应改为:

int myArrays [] = new int [8];

2.

您调用bon.charAt() 而不检查您的变量bon 是否有足够的字符。

【讨论】:

【参考方案6】:

Java.lang.StringIndexOutofBoundsException 几乎表明字符串的长度小于索引。你应该考虑长度。还有其他人提到的数组中的其他超出范围。

【讨论】:

【参考方案7】:

试试这个:

替换这两行:

String bon = Integer.toString(x , 2);
int myArrays [ ] = new int [ 7 ];

用这些行(1只是为了显示初始值):

String byteString = Integer.toBinaryString(x & 0xFF);
byteString = String.format("%8s", byteString).replace(' ', '0');
int[] myArrays = new int[8];
System.out.println("(" + byteString  + ")");

【讨论】:

以上是关于转换为二进制 - 获取 IndexOutOfBoundsException的主要内容,如果未能解决你的问题,请参考以下文章

转换为二进制 - 获取 IndexOutOfBoundsException

将文件转换为二进制(11111111110)然后执行反向路径以获取图像

Perl - 将十六进制转换为二进制并将其用作字符串

获取码值和进制转换系统(包括正负数小数)

二进制图片如何转化为值

python转换为二进制