Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何创建贯穿方形棱锥体方程的循环_Java_Loops_For Loop_Math_Perfect Square - Fatal编程技术网

Java 如何创建贯穿方形棱锥体方程的循环

Java 如何创建贯穿方形棱锥体方程的循环,java,loops,for-loop,math,perfect-square,Java,Loops,For Loop,Math,Perfect Square,对Java来说是相当陌生的。我试图创建代码,找出哪一个本身就是一个完美的正方形 方形棱锥体数基本上是指层数为n的棱锥体中球的总数。我在找n,它的球总数是一个完美的正方形。我已经从数学上算出了它(只有两个n值有效——1和24,分别产生1和4900的平方金字塔数),但我不知道如何编写代码来自动算出它 这是我现在拥有的代码,需要在n中输入整数才能找到答案。我想弄清楚如何做一个循环,它会自己产生1和24的答案 class SquarePyramidalNumber { public static

对Java来说是相当陌生的。我试图创建代码,找出哪一个本身就是一个完美的正方形

方形棱锥体数基本上是指层数为n的棱锥体中球的总数。我在找n,它的球总数是一个完美的正方形。我已经从数学上算出了它(只有两个n值有效——1和24,分别产生1和4900的平方金字塔数),但我不知道如何编写代码来自动算出它

这是我现在拥有的代码,需要在n中输入整数才能找到答案。我想弄清楚如何做一个循环,它会自己产生1和24的答案

class SquarePyramidalNumber
{
    public static void main(String[] args)
    {
        double t,n=24;
        t=(n*(n+1)*(2*n+1))/6;
        System.out.println("\n");
        System.out.println("Layer number = " + n );
        System.out.println("Number of balls in layer = " + n*n );
        System.out.println("Total number of balls = " + t );
        System.out.println("Square root of total number of balls = " + Math.sqrt(t) );
        System.out.println("\n");
    }
}

希望我解释得很好!感谢您的帮助。

首先,您会注意到金字塔中的每一层球都是由许多球组成的,这些球是一个完美的正方形(1,4,9,16,…) 所以一个金字塔的总球数,它的底面是,比如说n个球, 金字塔编号将是

n + 
(sqrt(n)-1)^2 +
(sqrt(n)-2)^2 +
.. +
1
所以,从解决问题开始。首先,你必须知道一个数字是否是金字塔,所以让我们创建一个如下的方法:

private boolean isPyramid(int n) 
你还必须知道一个数字是否是一个完美的正方形:

private boolean isPerfectSquare(int n)
填充这些方法后,您可以循环查找满足这两个条件的数字:

int i=1;
while(true){ //this will run forever so be careful
  if (isPyramid(i) && isPerfectSquare(i)){
    System.out.println("Found one! "+i);
  }
  i++;
}

现在,您的任务是用代码填充这两个方法:)

我不完全理解您的答案。就像我说的,我对Java还很陌生。我上面的等式不够吗?我想我需要找到一个循环,当Math.sqrt(t)的结果是一个整数时,它会以某种方式终止。我走错方向了吗?我的代码用于查找我的答案,但它需要手动输入不同的n值,直到达到两个n值,其t的平方根是整数。我很抱歉没有完全理解你的答案。非常感谢您的回复!谢谢,这对我来说很有意义!我想我应该能从这里解决我的问题。再次感谢你,我真的很感激!