2012-06-23 245 views
0

这里超java noob,我相信它可能是一个愚蠢的错误。有人在意纠正我?为什么不运行此代码?

public class Test1 { 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    // TODO code application logic here 
int n = 4; 

public void f(int n){ 
System.out.print(n); 
if(n<=1) 
    return; 
    else{ 
     f(n/2); 
     f(n/2); 
     } 
    } 
} 

我得到这个错误:

Exception in thread "main" java.lang.RuntimeException: 
Uncompilable source code - illegal start of expression at the 
public void f(int n) 
+2

年底方法编译它。 –

+0

它指向我想要运行的方法...线程“main”中的异常java.lang.RuntimeException:不可编译的源代码 - 在公共void f(int n)行非法开始表达式行 – user1477348

+0

提示:计数数''''字符和'''字符的数量。他们应该是一样的。 –

回答

3

你不能在Java方法内声明的方法。您在public void f(int n)之前的某个位置丢失了}

1

这样做:

public static void main(String[] args) 
{ 
    // TODO code application logic here 
    int n = 4; 

    f(n); 
} 

public void f(int n) 
{ 
    System.out.print(n); 

    if(n <= 1) 
    { 
     return; 
    } 
    else 
    { 
     f(n/2); 
    } 
} 
+0

,这给了我一个错误,但是,如果我将其更改为静态方法,那么它没关系......任何理由为什么? – user1477348

+0

由于使用'f'方法,您必须实例化一个声明它的类的实例。使它成为'静态'就没有这个必要了。 –

+0

是的,因为没有实例。 –

3

的结构需要有点不同,试试这个方法:

public class Test { 

    public static void main(final String[] args) { 
     f(4); 
    } 

    public static void f(final int n) { 
     System.out.print(n); 
     if (n <= 1) { 
      return; 
     } else { 
      f(n/2); 
      f(n/2); 
     } 
    } 
} 
0

因为编译器代码看起来像这样

public class Test1 { 

    public static void main(String[] args) { 
     int n = 4; 


     public void f(int n) { 
      System.out.print(n); 
      if (n <= 1) 
       return; 
      else { 
       f(n/2); 
       f(n/2); 
      } 
     } 
    } 

所以它有2个错误

1)你想因为你有一个语法错误,该编译器应该告诉你,当你试图创造方法(fmain

2)没有}在类