【问题标题】:How to output same numbers from previously defined two different integer arrays如何从先前定义的两个不同整数数组中输出相同的数字
【发布时间】:2019-03-25 12:35:06
【问题描述】:

我需要编写一个程序,它定义了int 的两个数组,并打印第一个数组中没有出现在第二个数组中的所有元素,但每个值只出现一次,没有重复(打印值的顺序是无关)。 例如对于数组:

int[] arr = { 4, 3, 4, 3, 6, 7, 4, 8, 2, 9 };
int[] brr = { 2, 3, 6, 8, 1, 5 };

结果应该是:

7 4 9

它只使用java.lang. 包,不能创建任何数组、集合或字符串。

【问题讨论】:

  • 这个问题太混乱了。你的意思是,数组 1 中定义的数字,而不是数组 2 中的数字?
  • 你试过什么? (顺便说一句,考虑到疯狂的要求,这听起来像是一项家庭作业,我们并不是真正为他们做家庭作业。我们喜欢帮助解决特定的编程问题。)看看stackoverflow.com/help/how-to-ask
  • 你可以通过迭代arrbrr来做到这一点
  • 是的,当然,数组 1 中定义的数字,但数组 2 中没有定义
  • 不,这不是硬件。这项任务正在测试中,但不幸的是我没有这样做。所以现在我想为自己完成这个任务。这就是我问的原因。

标签: java arrays int


【解决方案1】:

这会打印第一个数组中没有出现在第二个数组中的所有元素,现在您只需检查是否有重复。

public static void compareArrays(int[] arr1, int[] arr2) {
  boolean equal = false;
  int[] printed = null;
  for (int i = 0; i < arr1.length; i++) {
    for (int x = 0; x < arr2.length; x++) {
      if (arr1[i] == arr2[x]) {
        equal = true;
        break;
      } else {
        equal = false;
      }
    }
    if (equal != true) {
      System.out.println(arr1[i]);
    }
  }
}
public static void main(String[] args) {
  int[] arr = { 4, 3, 4, 3, 6, 7, 4, 8, 2, 9 };
  int[] brr = { 2, 3, 6, 8, 1, 5 };
  compareArrays(arr, brr);
}

【讨论】:

    【解决方案2】:

    我会给你一些指示,但不会提供任何代码,因为我没有看到你的任何尝试。您可以通过多种方式解决此问题,看看并尝试自己实现。在此过程中,您将学到更多,而不是有人给您完整的完整代码答案。所以这里是:

    第一种方法:

    1. 创建一个新的 ArrayList 来保存您的输出。
    2. 遍历第一个数组,遍历第二个数组。比较每个值。
    3. 如果值不存在且输出列表中不存在(您需要专门检查该值,以免值重复),然后将其添加到输出列表中。
    4. 打印输出列表。

    第二种方法:

    1. 将两个数组转换为 ArrayList。

    2. 使用列表提供的removeAll() 方法来获取数组之间的差异。这将存储在您之前创建的列表之一中。

    3. 从列表中删除重复项(例如,使用 Streams)。

    第三种方法:

    1. 创建一个新的 ArrayList 来保存您的输出。

    2. 遍历array1的值。

    3. 初始化一个布尔变量(例如,称之为contains),它将使用IntStream确定array1中的值是否存在于array2中。

    4. 创建 if 语句 - 如果 contains 为真,则将该值添加到您的输出列表中。检查您的输出列表是否已经没有该值,如果没有则仅添加。打印输出列表。

    【讨论】:

      【解决方案3】:

      尝试改用这个:

      String[] unique = new HashSet<String>(Arrays.asList(arr)).toArray(new String[0]);
      
      for (int uEach : unique) {
        for (int bEach : brr) {
          if (unique[uEach] == brr[bEach]) {
             ArrayUtils.removeElement(unique, uEach);
          }
        }
      };
      
      System.out.print(unique);
      

      【讨论】:

        【解决方案4】:

        您可以使用从数组中获取距离值:

        int[] unique = Arrays.stream(arr).distinct().toArray(); 
        

        然后遍历两个数组并匹配字符串,如果没有找到打印:

        int i, j, occ;
        int[] arr = { 4, 3, 4, 3, 6, 7, 4, 8, 2, 9 };
        int[] brr = { 2, 3, 6, 8, 1, 5 };
        arr = Arrays.stream(arr).distinct().toArray();
        for (i = 0; i < arr.length; i++) {
          occ = 0;
          for (j = 0; j < brr.length; j++) {
            if (arr[i] == brr[j]) {
              occ++;
            }
          }
          if (occ == 0) {
            System.out.println(arr[i]);
          }
        }
        

        【讨论】:

        • 我没有对你投反对票,但我想这可能是因为它不鼓励在 SO 中对未显示尝试的问题提供完整的代码答案。你这样回答会鼓励人们简单地粘贴他们的硬件并期望其他人为他们做。
        • 这不是硬件,这是过去测试的练习,不幸的是我没有做过。我有重复的问题。并且使用了另一个数组,但这应该可以在没有任何其他数组的情况下工作。
        • @MarkLadyshev 这不是什么大问题,您可以用旧数组替换新数组
        【解决方案5】:
        static void findMissing(int a[], int b[]) {
          for (int i = 0; i < a.length; i++) {
            int j;
            for (j = 0; j < b.length; j++) {
              if (a[i] == b[j]) {
                break;
              }
            }
            if (j == b.length) {
              System.out.print(a[i] + " ");
            }
          }
        }
        

        【讨论】:

        • 此方法为您提供不在另一个数组中的数字是的,但它会有重复的数字。但我不明白为什么要投反对票?
        • 请描述一下,问题出在哪里,这个 sn-p 将如何解决它,以帮助其他人理解这个答案。这也可能导致更多的赞成票
        猜你喜欢
        • 1970-01-01
        • 2016-02-15
        • 2019-06-28
        • 1970-01-01
        • 1970-01-01
        • 2019-05-03
        • 2023-03-17
        • 1970-01-01
        • 2021-07-10
        相关资源
        最近更新 更多