我在编写静态方法时遇到了麻烦

New*_*ick 1 java

我在制作静态方法方面不是很有经验......我想要一些练习,但我遇到了一些问题.我正在尝试制作一个输入数字的程序,它会打印出小于b的所有正方形.例如,如果你输入100,它会返回0,1,4,9,16,25,36,49,64,81.但是我收到了错误.

  • 参数getSquares的非法修饰符; 只有决赛是允许的.这是行公共静态双getSquares(双b)

- 当我尝试做Squares.getSquares(100)时,方法getSquares(int)未定义Square类型; ...我猜这是因为我的第一个问题.请帮助我,我知道静态方法很重要,但我不知道如何制作它们.

package Testers;
import java.util.Scanner;

public class Squares 
{
    public static void main(String[] args)
    {
        Squares.getSquares(100);

        public static double getSquares(double b)
        {
            double sqrtNum=Math.sqrt(b);
            int i=0;
            while(i<sqrtNum)
            {
                sqrtNum=Math.pow(i,2);
                System.out.print(sqrtNum+" ");
                i++;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

bcs*_*001 7

你不能在方法中声明一个方法 - 格式化你的代码,它更清楚.例:

package Testers;
import java.util.Scanner;

public class Squares {
    public static void main(String[] args) {
        Squares.getSquares(100);   
    }

    public static double getSquares(double b) {
        double sqrtNum = Math.sqrt(b);
        int i = 0;
        while(i < sqrtNum) {
            sqrtNum = Math.pow(i, 2);
            System.out.print(sqrtNum + " ");
            i++;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,没有返回值getSquares()- 看起来你打算这样做void.最后,这个while循环:

int i = 0;
while(i < sqrtNum) {
    // code
    i++;
}
Run Code Online (Sandbox Code Playgroud)

可以简化为这个for循环:

for (int i = 0; i < sqrtNum; i++) {
    // code
}
Run Code Online (Sandbox Code Playgroud)


eme*_*sso 6

如果你想让它成为Squares类的方法,你的静态方法不应该在main()中.它应该是正方形而不是主正面,例如:

public class Squares
{
     public static void main(..) {...}
     public static double getSquares(...) {...}
}
Run Code Online (Sandbox Code Playgroud)