2013-03-15 111 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); 
    } 
}