我需要打印32位二进制数字的所有实例,其中没有两个1s相邻。
例如:
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;
}
}这是我收到的索引错误。我相信,当我检查相邻1s的索引时,会出现错误,但我不知道为什么会超出范围。有人能帮忙吗?
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 32
at java.lang.String.charAt(String.java:658)
at program.program.main(program.java:30)
Java Result: 1发布于 2014-03-06 23:55:32
试着使用:
for(int k = 0; k < number.length() - 1; k++)这句话:
number.charAt(k+1)将超出当前设置的范围,超过数组中的最后一个元素。
发布于 2014-03-06 23:55:26
当您检查数组中的kth元素时,在检查k+1th元素之前,不检查它是否是数组的末尾,这将使您超出数组的范围。
发布于 2014-03-07 00:03:13
因此,基本上,您从一个整数创建一个二进制字符串,并希望查看它是否包含子字符串"11“。一个更简单的方法是使用regex或使用
if(!number.contains("11"))
{
System.out.println(number);
}这有点简单,除非你试图用一个算法来证明这一点。
https://stackoverflow.com/questions/22238699
复制相似问题