2017-01-16 80 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

你能解釋一下靜態部分嗎?爲什麼使階乘靜態使其工作,而不是其他方式。它是否類似於靜態變量(其中變量類型記住以前的值,然後繼續?) –