在for循环中找不到符号编译错误

时间:2013-03-15 04:49:05

标签: java loops for-loop

我的代码出现问题。我试图找到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);
        }
    }

4 个答案:

答案 0 :(得分:1)

Java有block scoping,,这意味着在sum s(大括号)之间声明的{}在外面不可见。在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);
    }
}

答案 1 :(得分:0)

你不能在循环中声明sum。然后它就是那个方法的本地。

答案 2 :(得分:0)

这是因为你在sum语句中“创建”if限制了它们的范围 - 它们是在if块内创建的,并在下一个右括号中被销毁。< / p>

摆脱int sum;块内的那两条if行并将其放在函数的顶部(相当无用的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);
    }
}

答案 3 :(得分:0)

你已经在if / else中定义了变量sum,这限制了变量的范围。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);
    }
}