计算整数数组元素的平方根时出现Arrays.asList问题

时间:2014-11-11 13:35:02

标签: java arrays list square-root

我试图编写一个获取一组int的代码并检查数字的平方根是否在数组中,如果是,则会打印是,否则将打印否。 我无法弄清楚为什么我的代码一直没有返回。

例如,如果我的输入是:1 4 0 2 16 3

我的输出将是:是是是否是否否

这是我的代码:

import java.util.Arrays;

public class Assignment02Q04 {
    public static void main(String[] args) {
        int[] intlist = new int[args.length]; 
        for (int i=0; i < args.length; i++) {
            intlist[i] = Integer.parseInt(args[i]);
        }

        for (int number : intlist) {
            int sqrt = (int)(Math.sqrt(number)); 
            System.out.println(sqrt); 
            if (Arrays.asList(intlist).contains(sqrt)) {
                System.out.println("yes");
            } else {
                System.out.println("no"); 
            }
        }
   }            
}

2 个答案:

答案 0 :(得分:10)

Arrays.asList(intlist)返回数组int[]的列表。 int[]数组本身被视为传递给方法的单个对象

// the return is a list of arrays; arrays are objects in Java
List<int[]> asList = Arrays.asList(intlist);

您可以使用Integer对象数组来解决此问题。

Integer[] intlist = new Integer[args.length]; 
for (int i=0; i < args.length; i++) {
    intlist[i] = Integer.parseInt(args[i]);
}

答案 1 :(得分:3)

考虑使用Arrays.asList()从一开始就使用集合,而不是连续转换。 此外,通过使用平方根上的地板并将其2的幂与原始数字进行比较,检查数字是否具有自然平方根。这是返回预期结果的代码是是是否是否:

public static void main(String[] args) {
    List<Integer> intlist = new ArrayList<Integer>();
    for (int i = 0; i < args.length; i++) {
        intlist.add(Integer.parseInt(args[i]));
    }

    for (int number : intlist) {
        int sqrt = (int) (Math.floor(Math.sqrt(number)));
        if (sqrt * sqrt == number && intlist.contains(sqrt)) {
            System.out.print("yes ");
        } else { 
            System.out.print("no ");
        }

    }
}