【问题标题】:Arrays.asList issue when computing square root of integer array elements计算整数数组元素的平方根时的 Arrays.asList 问题
【发布时间】:2014-11-11 13:35:02
【问题描述】:

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

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

我的输出是:yes yes yes no yes no

这是我的代码:

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"); 
            }
        }
   }            
}

【问题讨论】:

  • 不能只从代码上说。也许...尝试使用整数而不是整数。列表更适用于对象而不是基元。
  • @CoolGuy 这没有回答问题,因为他想检查整个原始数组中的那个数字。
  • Integer[] intlist 而不是 int[] intlist
  • @MuhammadHijazi ,哎呀!你是对的。

标签: java arrays list square-root


【解决方案1】:

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, 4, 0, 2, 16, 3} 的平方根值是 {1, 2, 0, 1, 4, 1} 并且它们都存在于列表中。
  • 2 的平方根是 1.41,但在从 double 转换为 int 时会丢失小数。因此,答案是错误的。
  • @Adrian OP 显然应该避免转换,但这不是他或她所面临问题的主要原因。
  • 是的,看太多代码,没有逻辑XD反正认为代码是“解决”=)
【解决方案2】:

考虑使用 Arrays.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 ");
        }

    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 2014-01-06
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    相关资源
    最近更新 更多