实际上,整个代码的目的是获取数组中的输入值(0或1),然后检查输入的数组是否为6连续0,然后在每6个连续0之后插入'1'。我发现这个块
if(j>5){
shift(i+6);
bits[i+6] = 1;
count+=1;
System.out.println(count);
}
即使输入的数组中没有连续6个0,也会执行。然后检查问题。我添加了这个声明
System.out.println("ABHINAV " + j );
这里是输出: -
Entered Bits are:
1
0
1
0
1
0
1
0
1
0
ABHINAV 0
ABHINAV 1
ABHINAV 0
ABHINAV 1
ABHINAV 0
ABHINAV 1
ABHINAV 0
ABHINAV 1
ABHINAV 0
ABHINAV 6
我发现问题 - 变量'j'递增到6,因此输入'if'块。我的问题是: -
'j'如何增加到6(正如您可以看到输出快照的最后一行)。
如何解决这个问题。我做错了什么。
这是整个代码
class Stuff{
public static final int LENGTH=6;
public int count=0;
int n;
public int bits[] = new int[40];
Scanner inputs = new Scanner(System.in);
Stuff(int x){
n=x;
}
public void input(){
for(int i=0 ; i<n ; i++){
bits[i] = inputs.nextInt();
}
}
public void len_check(){
int j=0;
for(int i = 0 ; i< n ; i++){
j=0;
while(bits[i+j] == 0 && j<LENGTH){
j+=1;
}
System.out.println("ABHINAV " + j );
if(j>5){
shift(i+6);
bits[i+6] = 1;
count+=1;
System.out.println(count);
}
}
}
public void shift(int u){
for(int i=n ; i>= u ;i--){
bits[i+1] = bits[i];
}
}
public void display(){
for(int i=0 ; i<n+count ; i++){
System.out.println(" " + bits[i]);
}
}
}
class Problem{
public static void main(String args[]){
int n;
Scanner inputs = new Scanner(System.in);
System.out.println("\nEnter bit stream length");
n = inputs.nextInt();
Stuff stuff = new Stuff(n);
System.out.println("Now Enter the bits: ");
stuff.input(); // Enter the bit stream
System.out.println("Entered Bits are: ");
stuff.display();
stuff.len_check();
System.out.println("Altered Bits are: ");
stuff.display();
}
}
答案 0 :(得分:1)
bits变量实例化为长度为40,
public int bits[] = new int[40];
这样,bits []是一个长度为40的零数组。之后,前十个元素被输入替换。这是阵列:
index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...
value 1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 ...
此代码:
while(bits[i+j] == 0 && j<LENGTH){
j+=1;
}
当i = 9时,它会增加j 6次,因为位[9]到位[14]为0。
答案 1 :(得分:1)
bits
是一个长度为40的int数组,因此在扫描完System.in之后它已经为0。
当i = n-1时,检查输入的最后一个数字是0,所有下一个数字是0,所以j增加到6。
答案 2 :(得分:1)
这是因为输入只有10个位置,在10个第一个值之后,数组bits
填充了0
(标准值)。
它按照程序运行,从位置10开始发现6 0
。
它应该在到达n - 5
位置时停止,例如:
...
int j = 0;
for (int i = 0 ; i< n-5 ; i++) {
j = 0;
...
答案 3 :(得分:0)
for(int i = 0 ; i< n ; i++){
j=0;
while(bits[i+j] == 0 && j<LENGTH){
j+=1;
}
这将立即将j设置为6。使用if代替:
if(bits[i+j] == 0 && j<LENGTH){
j+=1;
}