变量j的值如何递增到6

时间:2017-02-01 13:44:00

标签: java

实际上,整个代码的目的是获取数组中的输入值(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();
    }
}

4 个答案:

答案 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;
     }