Java(1)編寫一個方法fact實現參數給定值的階乘計算,然後在main方法中對其進行調用。 //(2)從控制檯輸入整數n,求出其階乘n!後輸出。出現的小問題

原代碼

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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章