Magic Square程序卡在循环中

时间:2016-09-07 15:27:59

标签: java for-loop while-loop

    public static void main(String[] args)
    {
        PrintMagic(1);
    }
    public static void PrintMagic(int n)
    {
        int count = 1;
        int[] array = new int[n];
        int magic = 0;
        while(count<=n)
        {
            for(int i = 0; i <= count; i++)
            {
                magic += i;
                if(Math.sqrt(magic) == ((int)Math.sqrt(magic)))
                {
                 array[i] = magic;
                 count++;
                }
            }
        }
        for(int i = 0; i<array.length; i++)
        {
           System.out.println(array[i]);
        }
    }

该程序应该打印n个幻方(一个具有整数平方根的数字,并且是连续数字的总和。) 恩。 36的平方根为6且1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 = 36

我在主函数中传递方法数字3,但是我被困在一个循环中(糖果手杖看着蓝色的J吧)

我有没有看到的东西?

2 个答案:

答案 0 :(得分:1)

你的问题陈述是测试每个连续的和是否是一个完美的正方形(1 + 2 + .. + n是一个完美的正方形)。所以你基本上想要的是:if(Math.sqrt(n*(n+1)/2) == ((int)Math.sqrt(n*(n+1)/2)))You can refer to the answer by a.yekimov。他纠正了你的代码,你可以注意到魔法只不过是n个连续整数的总和。

在你的代码中:      public static void main(String[] args) { PrintMagic(1); } public static void PrintMagic(int n){
int count = 1;// array index start from 0 in java int[] array = new int[n]; int magic = 0; while(count<=n){/*since array index starts from zero, equals is to be
removed*/
for(int i = 0; i <= count; i++){/*the loop termination should be at count<n not i<=count*/ magic += i; if(Math.sqrt(magic) == ((int)Math.sqrt(magic))){ array[i] = magic; count++; } } } for(int i = 0; i<array.length; i++) { System.out.println(array[i]); } }

您还可以尝试: public static void main(String[] args) { PrintMagic(3); } public static void PrintMagic(int n) { int count = 0; int[] array = new int[n]; int magic = 0; int i = 0; while(count<n){ magic += i; if(Math.sqrt(magic) == ((int)Math.sqrt(magic))){ array[count] = magic; count++; } i++; } for(i = 0; i<array.length; i++){ System.out.println(array[i]); } }

答案 1 :(得分:0)

试试这个:

public static void PrintMagic(int n)
{
    int count = 0;
    int[] array = new int[n];
    int magic = 0;
    for(int i = 0; count < n; i++)
    {
        magic += i;
        if(Math.sqrt(magic) == ((int)Math.sqrt(magic)))
        {
            array[count] = magic;
            count++;
        }
    }
    for(int i = 0; i<array.length; i++)
    {
        System.out.println(array[i]);
    }
}