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

Java Arrays.asList在计算整数数组元素的平方根时出现问题,java,arrays,list,square-root,Java,Arrays,List,Square Root,我正在尝试编写一个代码,它获取一个整数数组,并检查数组中是否有数字的平方根,如果是,它将打印是,否则它将打印否。 我不明白为什么我的代码总是返回no 例如,如果我的输入是:1 4 0 2 16 3 我的输出将是:是是否是否 这是我的代码: import java.util.Arrays; public class Assignment02Q04 { public static void main(String[] args) { int[] intlist = new

我正在尝试编写一个代码,它获取一个整数数组,并检查数组中是否有数字的平方根,如果是,它将打印是,否则它将打印否。 我不明白为什么我的代码总是返回no

例如,如果我的输入是: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"); 
            }
        }
   }            
}
导入java.util.array;
公共类分配02Q04{
公共静态void main(字符串[]args){
int[]intlist=新的int[args.length];
对于(int i=0;i
数组。asList(intlist)
返回数组列表
int[]
int[]
数组本身在这里被视为传递给方法的单个对象:

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

考虑从一开始就使用集合,而不是使用array.asList()连续转换。 此外,通过在平方根上使用floor并将其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 ");
        }

    }
}
publicstaticvoidmain(字符串[]args){
List intlist=new ArrayList();
对于(int i=0;i
不能仅从代码中说出。大概尝试使用整数而不是int。List更适合对象而不是原语。@Coolgay这并没有回答问题,因为他想检查整个原始数组中的数字。Integer[]intlist而不是int[]intlist@MuhammadHijazi哎呀!是的,因为{1,4,0,2,16,3}的平方根值是{1,2,0,1,4,1},它们都存在于列表中。2的平方根是1.41,但小数在从double转换为int时丢失。因此,答案是错误的。@Adrian OP显然应该避免转换,但这不是他或她面临的问题的主要原因。是的,看太多代码,没有逻辑XD反正认为代码“已解决”=)
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 ");
        }

    }
}