Java 查找重复的相邻元素时字符串索引超出范围?

Java 查找重复的相邻元素时字符串索引超出范围?,java,string,binary,Java,String,Binary,我需要打印没有两个1相邻的32位二进制数的所有实例 例如: 10101010101010000000101010101010 is valid 01010101010110000000000000000000 is not because there are adjacent 1s 这是我的 String number; boolean valid = false; for(int i = 0; i<= 1e32; i++) { //cr

我需要打印没有两个1相邻的32位二进制数的所有实例

例如:

10101010101010000000101010101010 is valid


01010101010110000000000000000000 is not because there are adjacent 1s
这是我的

String number;
    boolean valid = false;


    for(int i = 0; i<= 1e32; i++)
    {
         //create binary number
         number = String.format("%32s", Integer.toBinaryString(i)).replace(' ', '0');

         for(int k = 0; k <= number.length() - 1; k++)
         { 
             //check if there are adjacent 1s
             if((number.charAt(k) == '1') && (number.charAt(k+1) == '1'))//I believe error is from this line
             {
                 valid = false;
             }
             else
             {
                 valid = true;
             }
         }
         if(valid == true)
         {
            //Print if there are no adjacent 1s
            System.out.println(number);
            valid = false;
         }
    }

检查数组中的第k个元素时,在检查k+1个元素之前,您没有检查它是否是数组的结尾,这会使您超出数组的边界。

尝试使用:

for(int k = 0; k < number.length() - 1; k++)

将超出当前设置的范围,超过数组中的最后一个元素。

因此,基本上,您可以从整数创建一个二进制字符串,并查看它是否包含子字符串“11”。一种更简单的方法是使用regex或

if(!number.contains("11"))
{
    System.out.println(number);
}

它稍微简单一点,除非您试图得到一个算法来证明它。

如果字符串以
'1'
结尾,这将失败。请注意,如果设置了两个相邻的位,那么
x&(x)不判断您的方法,但为什么不使用number.contains(“11”)呢?事实上,即使它被更改为正确终止,我也怀疑它是否能够在合理的时间内输出所有具有所需属性的32位数字。如果这确实是要求,则可能需要不同的算法。(但我可能错了。我必须尝试一些测试。)@哦,我让他们去点阵打印机。
number.charAt(k+1)
if(!number.contains("11"))
{
    System.out.println(number);
}