一个问题

假设我们要编写一个程序,比较两个整数列表,看它们是否包含相同的数字。两个列表中的数字可以以任意顺序出现,并且数字可以重复。例如,列表

2 4 8 3 9 4

9 4 2 8 4 3

包含相同的数字。

这个实验练习将带你完成编写一个程序来解决这个问题的过程。

(注意,如果我们对两个列表都进行排序,这个问题会变得更容易解决。由于本实验练习的主要目的是获得一些使用数组和方法的练习,因此我们将不采用这种方法。

开始

为方便起见,我们应该假设所讨论的数字存储在两个单独的文本文件中。

首先,我们需要一些代码来从文本文件中读取整数列表,并将它们放入数组中。下面的方法可以做到这一点。

public static int[] readNumbers(String fileName){扫描器输入= null;try {input = new Scanner(new File(fileName));} catch(Exception ex) {ex. printstacktrace ();system . exit (0);} int N = 0;//计算文件中有多少个数字。while(input.hasNextInt()) {int未使用= input.nextInt();N + +;} input.close ();int[] = new int[N];//创建一个合适大小的数组尝试{input = new Scanner(new File(fileName));} catch(Exception ex) {ex. printstacktrace ();system . exit (0);} for(int n = 0;n < A.length;n++) A[n] = input.nextInt();input.close ();返回一个;}

编写第二个方法

printNumbers(int A[])

它将存储在数组中的数字列表打印到System。输出,每行一个数字。这将允许你确认你读的数字是正确的。

使用这两个方法编写一个程序,从文本文件中读取一组数字,然后将它们打印到System.out。

解决原始问题的策略

这里有一个解决列表比较问题的策略。

  1. 将两个列表读入数组1和数组2。
  2. 检查两个数组的长度。如果不相同,停止并报告数组不相同。
  3. 对于数组1中的每个数字执行如下操作:
    1. 数一下这个数字在数组1中出现了多少次。
    2. 数一下这个数字在数组二中出现了多少次。
    3. 如果计数不同,停止并报告数组不相同。

为了实现这个策略,编写以下两个方法的代码:

公共静态布尔比较(int 1 [],int 2 [])

第一个方法计算x在数组a中出现的次数。第二个方法使用上面概述的策略比较两个数组的内容,如果两个数组包含相同的数字则返回true,如果不包含相同的数字则返回false。

编写一个程序,使用该策略比较两个int型文件的内容。您的程序应该打开这两个文件,比较它们的内容,并打印一条消息,说明这两个文件是否包含相同的数字。