在做java算法题--统计1000内完数遇到的
class WanShu{
int factor=0;
public static void main(String[] args){
for(int i=1;i<=1000;i++){
for(int j=1;j<=i/2;j++){
if(i%j==0){
factor+=j;
}
}
if(factor==i){
System.out.println(i);
}
factor=0;
}
}
}
编译时报静态类无法引用非静态变量 问题
经网上查找答案,定位问题原因如下:
原来,在静态的方法中不能直接调用非静态的变量或属性。因为一个类的静态方法在这个Class文件被加载之后,就可以由这个Class类型对象来调用,而非静态的方法需要一个实例对象,有可能还未被创建,所以为了避免在静态方法中调用一个还不存在的实例对象的非静态方法,编译期就会直接阻止这个行为。
解决方案有:
将变量放置静态方法体内
class WanShu{
public static void main(String[] args){
for(int i=1;i<=1000;i++){
int factor=0;//不用重置循环变量
for(int j=1;j<=i/2;j++){
if(i%j==0){
factor+=j;
}
}
if(factor==i){
System.out.println(i);
}
//factor=0;
}
}
}
运行成功!