2017-01-16 81 views
-4

我收到这个编译问题,我无法弄清楚为什么。有人可以帮忙吗?这段代码为什么显示编译错误?

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声明()。在外面写它,它工作得很好。

+2

在System.out.println行后面缺少'}'。最后还有一个“太多”了。 –

+0

你忘了用'}括号关闭你的'main()'方法。最有可能的是,你在main中粘贴了'factorial'。 –

+0

是的,意识到了错误。我不知道另一个函数不能在main()中声明。谢谢你的帮助 –

回答

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,或者您需要创建一个实例来调用它),但它现在是在正确的位置。

+0

谢谢,现在好像工作。出于好奇,为什么你不能在main()中定义另一个函数? –

+0

@AmbareeshSJ:这不仅仅是Java的设计。你可以有一个lambda或者一个匿名类的实例,它们都有点像嵌套的方法,但是你不能定义一个实际的嵌套方法。 –

+0

你能解释一下静态部分吗?为什么使阶乘静态使其工作,而不是其他方式。它是否类似于静态变量(其中变量类型记住以前的值,然后继续?) –