在{}内初始化的变量不会递增

时间:2016-09-23 06:34:46

标签: java scope initialization

仅仅是为了练习我试图在两个不同的场景中运行以下代码我最初认为它们都可以工作但是当我运行程序时,一个工作而一个不工作,这里是代码工作

public class Test1
{
   public static void main(String args[])
   {

    int counter = 0; 
    int number = 1;
    do{ 
        System.out.println(number);
        number++; 
        counter++; 
    }while(counter<20);
}  }

O / P:1 2 3 ...... {打印到最多19}

这是一个没有工作的人

 public class Test2
{
   public static void main(String args[])
   {
    int counter = 0; 
    do{ 
        int data = 0; 
        System.out.println(data);
        data++; 
        counter++; 
    }while(counter<20);
}  }

O / P:0 0 0 0 ... {最多可打印19次}

2 个答案:

答案 0 :(得分:4)

因为在每次迭代中,你的数据字段将首先设置为0然后你打印它然后++它

public class Test2
    {
       public static void main(String args[])
       {
        int counter = 0; 
        do{ 
           int data = 0; // declare a new data field and initialize to 0
           System.out.println(data); // display zero
           data++; // data now is 1
           counter++; 
        }while(counter<20);
      } 
   }

答案 1 :(得分:0)

  

输出正确,因为数据variable在每次迭代中都被初始化为0

 public class Test2
    {
       public static void main(String args[])
       {
        int counter = 0; 
        do{ 
            int data = 0; System.out.println(data); data++; counter++; 
        }while(counter<20);
    }  }

考虑do .. while循环

假设第一次迭代

1.int data = 0; // data will be 0 
2.System.out.println(data); // prints 0
3.data++;//Incrementing the data to 1
4.counter ++;// incrementing the counter to 1 

第二次迭代

1.int data = 0; // data will be again set to  0 
2.System.out.println(data); // prints 0
3.data++;//Incrementing the data to 1
4.counter ++;// incrementing the counter to 2

因此输出将是数据0,0,0 .........并且计数器将是1,2,.....

  

数据的范围将是本地的并且每次都重新初始化,以避免您应该像在第一个代码示例中那样使变量脱离循环的问题