原代码
package com.company;
//编写实现阶乘的Java应用程序。要求:
//(1)编写一个方法fact实现参数给定值的阶乘计算,然后在main方法中对其进行调用。
//(2)从控制台输入整数n,求出其阶乘n!后输出。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
int x = reader.nextInt();
System.out.println(fact(x));
}
public int fact(int x){ //此处错误
int a = x;
int ans=1;
for(int i=1;i<=a;i++){
ans=ans*i;
}
return ans;
}
}
开始带着很藐视的态度看这道题,可发现居然出现了很奇怪的错误,慌了
Error:(11, 9) java: 无法从静态上下文中引用非静态 方法 fact(int)
错误原因
static 修饰的是静态方法,静态方法中不允许调用非静态方法,因为非静态方法是依赖于对象存在的,即非静态方法要通过对象的申明后才会存在,通过对象来调用,而静态方法是可以直接通过类名来调用的。
解决
去掉静态方法的static 或给调用的方法加static
(main方法的static不可以去掉)
修改后
package com.company;
//编写实现阶乘的Java应用程序。要求:
//(1)编写一个方法fact实现参数给定值的阶乘计算,然后在main方法中对其进行调用。
//(2)从控制台输入整数n,求出其阶乘n!后输出。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
int x = reader.nextInt();
System.out.println(fact(x));
}
public static int fact(int x){
int a = x;
int ans=1;
for(int i=1;i<=a;i++){
ans=ans*i;
}
return ans;
}
}