为什么此代码段显示编译错误?

时间:2017-01-16 11:58:53

标签: java compiler-errors

我收到了这个编译问题,但我无法弄清楚原因。有人可以帮忙吗?

    public static void main(String[] args) {

    Scanner scan = new Scanner(System.in);
    int n = scan.getInt() ;
    System.out.println(factorial(n)) ;


int factorial(int a){
        if (a==0) 
            return 1;
        else 
            return (a*factorial(a-1));
    }}

发布编辑注释:我不知道在main()中无法声明另一个函数。在外面写它,它工作得很好。

1 个答案:

答案 0 :(得分:6)

您正在尝试在 factorial方法中创建一个名为main 的方法。它必须紧挨着它,而不是它里面。

可读且一致地格式化代码有助于解决问题:

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        int n = scan.getInt();
        System.out.println(factorial(n));

        int factorial(int a) {                  // <=== Problem
            if (a == 0)
                return 0;
            else
                return (a * factorial(a - 1));
        }
    }
}

相反:

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        int n = scan.getInt();
        System.out.println(factorial(n));
    }

    int factorial(int a) {
        if (a == 0)
            return 0;
        else
            return (a * factorial(a - 1));
    }
}

以上问题仍有问题(factorial需要static,或者您需要创建一个实例来调用它),但现在它位于正确的位置。