为什么这两种定义出来运行结果会不一样。。

只是将x,y,z定义在主方法里和定义在for循环里,为什么一个运行是空白一个运行正常

1.

for (x = 0;x <= 20;x++ ){
            for (y = 0; y <= 33; y++){
                for (z = 0; z <=100;z++ ){
                    if (x + y + 3*z == 100 && 5*x + 3*y + z == 100 ){
                        System.out.println("公鸡" + x +"个");
                        System.out.println("母鸡" + y +"个" );
                        System.out.println("小鸡" + 3*z + "个");

运行结果

公鸡0个
母鸡25个
小鸡75个
公鸡4个
母鸡18个
小鸡78个
公鸡8个
母鸡11个
小鸡81个
公鸡12个
母鸡4个
小鸡84个

Process finished with exit code 0


2.

int x = 0 ;
        int y = 0;
        int z = 0;
        for (;x <= 20;x++ ){
            for (; y <= 33; y++){
                for (; z <=100;z++ ){
                    if (x + y + 3*z == 100 && 5*x + 3*y + z == 100 ){
                        System.out.println("公鸡" + x +"个");
                        System.out.println("母鸡" + y +"个" );
                        System.out.println("小鸡" + 3*z + "个");

运行为空白

1和2不等价,因为内层循环每次重新运行时都会初始化对应的变量为0
1和下面的代码等价

        int x = 0;
        int y = 0;
        int z = 0;
        for (; x <= 20; x++) {
            y=0;
            for (; y <= 33; y++) {
                z=0;
                for (; z <= 100; z++) {
                    if (x + y + 3 * z == 100 && 5 * x + 3 * y + z == 100) {
                        System.out.println("公鸡" + x + "个");
                        System.out.println("母鸡" + y + "个");
                        System.out.println("小鸡" + 3 * z + "个");
                    }
                }
            }
        }

最内层的循环完后,z就已经变成101了,没有重新赋值为0,就进不去了,同样第二层循环也是。