令牌“)”上的语法错误,此令牌后预期的语句

时间:2014-04-17 12:45:53

标签: java recursion syntax-error

我遇到了一个语法错误,即使搜索也无法弄清楚。

问题出在第12行,我一直试图使用递归。

完整错误是:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    Syntax error on token ")", Statement expected after this token

    at Problem_14.main(Problem_14.java:12)

代码是:

import java.util.HashMap;
import java.util.Map;


public class Problem_14 {

    public static long sequence(long o) {
     long n = 0;
      if (o % 2 == 0) n = o/2; sequence(n); 
      if (o % 2 != 0) n = 3*o + 1; sequence(n);
      return n;
    }


    public static void main(String[] args) {
        Map<String, Long> chain = new HashMap<String, Long>();
        //Iterative sequence 
        //n → n/2 (n is even)
        //n → 3n + 1 (n is odd)

        for (int i = 1; i < 1000000; i++) {
            chain.put(String.valueOf(i), sequence(i));
        }
    }

}

我已经完成了所有建议但无济于事。

3 个答案:

答案 0 :(得分:1)

无论如何,这看起来并不正确。不该&#39; T:

 if (o % 2 == 0) n = o/2; sequence(n); 

 if (o % 2 == 0) { n = o/2; sequence(n); }

答案 1 :(得分:1)

您似乎没有使用正确的编辑器。像这样的符号通常不会用在源文件中。尝试以UTF-8解码保存文件,或者更好的是,使用适当的EDI,如Eclipse。

    //n → n/2 (n is even)
    //n → 3n + 1 (n is odd)

答案 2 :(得分:0)

当你写一行时,你必须非常小心你的牙套。你编写它的方式,只有每个if的第一个语句实际上被认为是then块的一部分。我建议改为:

if (o % 2 == 0)
{
    n = o/2;
    sequence(n);
}
if (o % 2 != 0)
{
    n = 3*o + 1;
    sequence(n);
}