2017-01-16 24 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)); 
    }} 

ポスト編集注:私は別の関数は、(メイン内で宣言することができないという事実を認識していませんでした)。それを外に書くと、うまくいった。

+2

'System.out.println'行の後に'} 'がありません。最後に '' 'が多すぎます。 –

+0

あなたの 'main()'メソッドを '}'括弧で忘れてしまいました。おそらく、 'main'の中に' factorial'を貼り付けました。 –

+0

ええ、間違いを実現しました。 main()の中で別の関数を宣言できなかったことは知らなかった。助けてくれてありがとう –

答えて

6

あなたはあなたmainメソッド内factorialと呼ばれるメソッドを作成しようとしています。それはその中ではなく、その隣になければなりません。代わりに

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)); 
    } 
} 

は、上記のはまだstaticにする必要がありfactorial(問題を抱えている、またはあなたが作成する必要がありますそれを呼び出すインスタンス)が、現在適切な場所にあります。

+0

ありがとう、それは今働くようです。好奇心のためmain()の中に別の関数を定義できないのはなぜですか? –

+0

@AmbareeshSJ:それはJavaの設計方法ではありません。ラムダ、または匿名クラスのインスタンスを持つことができます。いずれもネストされたメソッドのように動作しますが、実際のネストされたメソッドを定義することはできません。 –

+0

静的部分について説明できますか?なぜ階乗を静的にするのが効くのですか? –

関連する問題