原代碼
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;
}
}