2013-03-15 114 views
-1

我在这里遇到了我的代码问题。我试图找到3和5的所有倍数高达一千,并将它们全部加起来,最后当我尝试输出总和时,java给了我一个'找不到符号'的错误。有人可以弄清楚这里有什么问题吗?在循环中找不到符号编译错误

public class Problem1 
    { 
     public static void main(String []args) 
     { 
      //int sum1; 
      //int sum2; 
      int finalSum; 

      for(int i = 0; i < 1000; i++) 
      { 
       if(i % 3 == 0) 
       { 
        int sum; 
        sum += i; 
       } 
       else if(i % 5 == 0) 
       { 
        int sum; 
        sum += i; 
       } 
      } 
      System.out.println(sum); 
     } 
    } 
+0

忽略sum1,sum2和finalSum声明,这是从早期的代码中可悲地过于复杂的。 – 2013-03-15 04:54:16

+1

然后从问题中完全省略它们,因为它们什么都不加。 – 2013-03-15 04:54:47

回答

1

Java有block scoping,这意味着{} S(括号)之间声明在sum是不可见的外侧。声明sum一次,以外的for循环。

public class Problem1 
{ 
    public static void main(String []args) 
    { 
     int sum = 0; 

     for(int i = 0; i < 1000; i++) 
     { 
      if(i % 3 == 0) 
      { 
       sum += i; 
      } 
      else if(i % 5 == 0) 
      { 
       sum += i; 
      } 
     } 
     System.out.println(sum); 
    } 
} 
+0

当我编译这个时,我得到'变量总和可能没有被初始化'在所有调用sum的行上。 – 2013-03-15 04:53:09

+0

确实。你需要初始化它。 **学习阅读,_really阅读,_编译器的错误信息。**它们非常有用。 – 2013-03-15 04:53:31

0

不能声明sum在loop.Then它是局部的方法。

0

这是因为您在if声明中“创建”sum,这限制了它们的范围 - 它们在if块内创建,并在下一个大括号销毁。

摆脱if块内的那两条int sum;行,并将它放在函数的顶部(其中finalSum相当无用)。或者只是使用finalSum无处不在。

您还可以结合if条件较短代码:

public class Problem1 
{ 
    public static void main(String []args) 
    { 
     int finalSum = 0; 

     for(int i = 0; i < 1000; i++) 
      if((i % 3 == 0) || (i % 5 == 0)) 
       finalSum += i; 

     System.out.println(finalSum); 
    } 
} 
+0

我不建议在这里删除大括号。 OP显然是一个初学者,这只会混淆事物。 – 2013-03-15 04:55:44

+0

马特,早点学习,经常学习:-)假如缩进正确完成,我发现读取_without_不必要的标点符号要容易得多。 – paxdiablo 2013-03-15 05:04:16

+0

梅,以后容易犯错误。不值得,特别是在这个级别。 – 2013-03-16 12:49:08

0

您已经定义了内部变量sum的if/else这限制了变量的作用域。 System.out.print()声明超出sum的范围,因此您收到错误。

public class Problem1 
{ 
    public static void main(String []args) 
    { 
     int sum=0; 
     for(int i = 0; i < 1000; i++) 
     { 
      if(i % 3 == 0) 
      { 
       sum += i; 
      } 
      else if(i % 5 == 0) 
      { 
       sum += i; 
      } 
     } 
     System.out.println(sum); 
    } 
}