之前写了这样一串代码:
int sum=0;
for (int i=2;i<=1000;i++){
for(int j=1;j<=i/2;j++){
if(i%j==0){
sum+=j;
}
}
if(sum ==i){
System.out.print(i+" ");
}
}
目的是求1-1000内的所有完数, 但是在代码运行之后却什么也没有输出
当时看了好半天也没有发现自己哪里错了,后来在老师的帮助下才发现是我忽略了局部变量的作用域,每次回到外层for循环时,sum的值是不会重新初始化的,从而导致了后面所求的sum值一直都是错的。改正之后代码如下:
for (int i=2;i<=1000;i++){
int sum=0;
for(int j=1;j<=i/2;j++){
if(i%j==0){
sum+=j;
}
}
if(sum ==i){
System.out.print(i+" ");
}
}
这样,在每次计算一个新的数字的因子之和时,sum值都会重新初始化为0,解决了上面的问题
经过这道题后我认识到了自己对变量认识的不足,于是去网上又学习了一下各种变量的区别。
全局变量是定义在类的里面,方法和语句块之外,可以在前面加权限修饰符,在访问全局变量时,可以用类名.全局变量名访问,也可以创建类的实例对象后用实例对象名.全局变量名访问
局部变量定义在方法和语句块以内,必须手动初始化后才可以使用,作用域仅限于一对大括号以内,不能加权限修饰符,每次重新进入到方法或者语句块时,该方法或者语句块下的局部变量都会重新初始化