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