方数Java

时间:2016-04-18 08:17:37

标签: java square-root

“数组用于存储十个整数。编写一个Java程序,用于确定和打印给定数组中也是奇数的方数。”

我遇到的问题是如何判断数组中的数字是否为正方形数字。我试过这种方式,但这不正确!

import java.math.*;
public class JavaApplication43 {

    public static void main(String[] args) {

        int[] no = {22, 44, 25, 89, 81, 55, 23, 25, 55};

        for (int i = 0; i < no.length; i++) {

            int x = no[i];
            double y;
            if (x % 2 != 0) {
                y = Math.sqrt(x);
                if (x == (Math.pow(y, 2))) 
                    System.out.println(no[i]);
            }
       }
   }
}

这是它给我的输出

run:
25
81
55
25
55

55也就是说这意味着我用的方法不成功!

3 个答案:

答案 0 :(得分:5)

你可以这样做:

for (int i = 0; i < no.length; i++) {
    int x = no[i];
    if (x % 2 == 0) continue;
    int y = (int) Math.sqrt(x);
    if (x == y * y) { 
        System.out.println(x);
    }
}

答案 1 :(得分:5)

您可以通过检查其平方根是否为整数来确定数字是否为正方形。

double sqrt = Math.sqrt(x);
long sqrt2 = Math.round(sqrt);
if (Math.abs(sqrt - sqrt2) / sqrt < 1e-15)
   // we have a square.

如果您知道xint,则不应该出现舍入错误,您可以

int x = ...
double sqrt = Math.sqrt(x);
if ((int) sqrt == sqrt)
    // we have a square.

答案 2 :(得分:2)

希望这会更容易,

    if((arr[i]%2 != 0) & (Math.sqrt(arr[i])%1 == 0)){
        System.out.println(arr[i]);
    }

在这里,如果条件优先我通过模数除法检查数字是否是奇数,第二个条件检查数字是否是完美的正方形。首先,我得到给定数字的平方根,然后取模数除以1并检查它是否等于0.如果数字是一个完美的正方形,那么该数字的平方根是一个整数,当我取一个整数的模数除法答案应该等于0。