想问一下为什么第一个代码不可以运行,第二个代码可以运行。它们的区别是什么

package y;

public class y12 {

public static void main(String[] args) { 
int s=0;
    for(int i=1;i<=1000;i++){
        
        for(int j=1;jif(i%j==0){
                s+=j;
        }
    }if(s==i){ 
        System.out.print(s+"的因子:");
        for(int j=1;jif(i%j==0){
        System.out.print(j+",");
            }
      }System.out.println();
    }
}    

}
}

package y;

public class y12 {

public static void main(String[] args) { 
    for(int i=1;i<=1000;i++){
        int s=0;
        for(int j=1;jif(i%j==0){
                s+=j;
        }
    }if(s==i){ 
        System.out.print(s+"的因子:");
        for(int j=1;jif(i%j==0){
        System.out.print(j+",");
            }
      }System.out.println();
    }
}    

}
}

s=0位置不同,就有不同效果,第二个每次循环都会吧s重新赋值为0,而第一个s在循环外边,所以里边都是累加的,不会清0

img

s不清零

for 循环内部的是局部变量,外部的是成员变量,而 for 循环内部的在执行一次循环后会清零,外部的并不会清零,能不能把执行结果,或者报错截图,放出来,这样,看的更清晰明了