如何比较Double Array Set

时间:2017-11-15 07:52:59

标签: java arrays double

嗨,我真的很感谢这个实验室的帮助。我不明白我做错了什么;例如,我不明白显示的程序错误。

5.13实验5b

目标

在本实验中,您将练习使用带有数组的for循环并使用阈值比较双值,以查看两组数字是否相同。

背景阅读

ZyBooks第5章

任务

主要方法的第一条评论应该是您的身份证明:

//Lab5b, [Name], [mascID]

您需要:

创建并填充两组double值,其中元素的数量和元素本身由用户指定。 (即,用户将说明第一组中有多少个数字,给出该组的值,然后转到第二组数字)。

迭代集合并比较值。出于本实验的目的,我们将说明顺序对确定集合是否相同很重要。 (提示:这也意味着数组的长度必须相同)。

如果数组的长度和值都相同,则print set one和set two相等。否则,打印设置1和设置2不相等

使用阈值比较双值

回想一下,浮点数可能会在很小的值上有所不同。例如,1.0实际上可能存储为0.9999999 ...或1.0000000002。

在比较这些值时,我们经常使用“容差”级别,即“如果差异小于某个数量,那么它可以忽略不计,数字可以被认为是相同的。”我们可以通过比较元素差异的绝对值和容差来实现这一点。例如,

if ( Math.abs( array1[0] - array2[0] ) > 0.001 ) )
    System.out.println("The values of array1[0] and array2[0] are not equal");

代码:

import java.lang.Math;
import java.util.Scanner;

public class SetComparison {
   public static void main (String [] args) {
      
      Scanner scnr = new Scanner(System.in);
      
      int array1Elems = 0;
      int array2Elems = 0;
      int i = 0;
      int j = 0;
      
      array1Elems = scnr.nextInt();
      array2Elems = scnr.nextInt();
      
      double array1[] = new double[array1Elems];
      double array2[] = new double[array2Elems];
      
      for (i = 0; i < array1Elems; ++i) {
         array1[i] = scnr.nextInt;
         for (j = 0; j < array2Elems; ++j) {
            array2[j] = scnr.nextInt;
         }
         if (Math.abs(array1[i] - array2[j]) > 0.001) {
            System.out.println("set one and set two are not equal");
         }
         else if (Math.abs(array1[i] - array2[j]) < 0.001) {
            System.out.println("set one and set two are equal");
         }
      }
   }
}

  

输入节目输入

     

6   45.24 54.67 42.55 44.61 65.29 49.75 6   45.24 54.67 42.55 44.61 65.29 49.75

     

此处显示的程序错误SetComparison.java:23:错误:不能   找到符号            array1 [i] = scnr.nextInt;                            ^符号:变量nextInt位置:变量scnr类型Scanner SetComparison.java:25:错误:不能   找到符号               array2 [j] = scnr.nextInt;                               ^符号:变量nextInt位置:类型为Scanner 2错误的变量scnr

2 个答案:

答案 0 :(得分:0)

除了@Andy Turner在评论中所说的内容(你错过了()),你的问题在于嵌套循环*。检查值后,需要从内循环中break

注意:这也将打印每次迭代是否相等,而不是整体。

for (i = 0; i < array1Elems; i++) {
        array1[i] = scnr.nextDouble();
        for (j = 0; j < array2Elems; j++) {
            array2[j] = scnr.nextDouble();
            if (Math.abs(array1[i] - array2[j]) > 0.001) {
                System.out.println("set one and set two are not equal");
            } else if (Math.abs(array1[i] - array2[j]) < 0.001) {
                System.out.println("set one and set two are equal");
            }
            break;
        }
    }

*虽然有更好的方法可以做到这一点,但这只是为了尽可能地匹配OP代码

答案 1 :(得分:0)

尝试这个答案我认为这会对你有帮助......

import java.lang.Math;
import java.util.Scanner;

public class SetComparison {
   public static void main (String [] args) {      
      Scanner scnr = new Scanner(System.in);

      int array1Elems = 0;
      int array2Elems = 0;
      int i = 0;
      int j = 0;

      array1Elems = scnr.nextInt();
      array2Elems = scnr.nextInt();

      double array1[] = new double[array1Elems];
      double array2[] = new double[array2Elems];

      for (i = 0; i < array1Elems; ++i) {
         array1[i] = scnr.nextInt();
      }
      for (j = 0; j < array2Elems; ++j) {
         array2[j] = scnr.nextInt();
      }   
      for (i = 0; i < array1Elems; ++i) {
         for (j = 0; j < array2Elems; ++j) {
            if (Math.abs(array1[i] - array2[j]) > 0.001) {
               System.out.println("set one and set two are not equal");
            } else if (Math.abs(array1[i] - array2[j]) < 0.001) {
               System.out.println("set one and set two are equal");
            }
         }         
      }
   }
}