【问题标题】:merging array then doing sorting and printing them合并数组然后对它们进行排序和打印
【发布时间】:2018-06-15 20:23:57
【问题描述】:

我可以使用以下代码合并数组并打印它,但在使用Arrays.sort 方法对其进行排序后无法打印数组。

问题出在哪里?

import java.util.Arrays;
import java.io.*;
import java.util.Scanner;

public class leetcode4Again {
    public static void main(String args[]) throws IOException {
        int a[] = new int[50];
        int b[] = new int[50];
        int merge[] = new int[a.length + b.length];
        int count = 0, size1, size2, size;
        int i = 0, k;

        Scanner scan = new Scanner(System.in);

        System.out.print("Enter Array 1 Size : ");
        size1 = scan.nextInt();

        System.out.print("Enter Array 1 Elements : ");
        for (i = 0; i < size1; i++) {
            a[i] = scan.nextInt();
        }

        System.out.print("Enter Array 2 Size : ");
        size2 = scan.nextInt();

        System.out.print("Enter Array 2 Elements : ");
        for (i = 0; i < size2; i++) {
            b[i] = scan.nextInt();
        }

        System.out.print("Merging the Arrays...\n");
        for (i = 0; i < size1; i++) {
            merge[i] = a[i];
        }

        size = size1 + size2;

        for (i = 0, k = size1; k < size && i < size2; i++, k++) {
            merge[k] = b[i];
        }
        Arrays.sort(merge);
        System.out.print("Now the New Array after Merging is :\n");
        for (i = 0; i < size; i++) {
            System.out.print(merge[i] + "  ");
        }

    }
}

【问题讨论】:

  • 您期待看到什么?你看到了什么?
  • 请阅读this。我们不知道你想在这里实现什么。
  • 这里的“无法打印数组”是什么意思?你得到像[I@4c75cab9这样的输出吗?顺便说一句,您所做的不称为“合并”,该术语在数据处理中具有特定含义。您所做的称为“连接”两个数组。

标签: java arrays sorting merge


【解决方案1】:

也许你会得到“0 0 0 0 ..”的答案,因为你首先用零值填充合并数组,然后用 a[] 和 b[] 值填充其中的一些单元格,但你仍然有一些“ 0”,所以当你排序时,“0”将排在第一位,答案将是错误的。 所以最好先定义合并数组

int merge[];

但不要初始化那个值; 然后在你得到 size1 和 size2 后,你可以用正确的大小初始化它

size = size1 + size2;
    merge = new int[size];
    System.out.print("Merging the Arrays...\n");
    for (i = 0; i < size1; i++) {
        merge[i] = a[i];
    } 
    // .....

【讨论】:

    【解决方案2】:

    问题是数组 merge 的分配大小,您可以找到类似的 issue 已经回答。

    您可以通过以下方式解决此问题:

    public class leetcode4Again {
        public static void main(String args[]) throws IOException {
    
            int  size1, size2, size;
            int i = 0, k;
    
            Scanner scan = new Scanner(System.in);
    
            System.out.print("Enter Array 1 Size : ");
            size1 = scan.nextInt();
            int a[] = new int[size1];
            System.out.print("Enter Array 1 Elements : ");
            for (i = 0; i < size1; i++) {
                a[i] = scan.nextInt();
            }
    
            System.out.print("Enter Array 2 Size : ");
            size2 = scan.nextInt();
            int b[] = new int[size2];
            System.out.print("Enter Array 2 Elements : ");
            for (i = 0; i < size2; i++) {
                b[i] = scan.nextInt();
            }
            int merge[] = new int[a.length + b.length];
            System.out.print("Merging the Arrays...\n");
            for (i = 0; i < size1; i++) {
                merge[i] = a[i];
            }
    
            size = size1 + size2;
    
            for (i = 0, k = size1; k < size && i < size2; i++, k++) {
                merge[k] = b[i];
            }
    
            Arrays.sort(merge);
    
            System.out.print("Now the New Array after Merging is :\n");
            for (i = 0; i < size; i++) {
                System.out.print(merge[i] + "  ");
            }
    
        }
    }
    

    或者

    //...
    int merge[] = new int[size1 + size2];
            System.out.print("Merging the Arrays...\n");
            for (i = 0; i < size1; i++) {
                merge[i] = a[i];
            }
    //...
    

    【讨论】:

      【解决方案3】:

      发生的情况是您有一个包含很多空格的数组,除非您实际上在第一个数组中填充了 50 个元素,在第二个数组中填充了 50 个元素。 Arrays.sort 正在对合并数组进行排序,您为其定义了 100 个元素位置,但实际上,如果您没有填充两个数组,则此合并数组将填充很多零(在 java 中为默认值,如果您有'nt 改变了一个数组元素,它是 0),并且因为排序是从底部到顶部开始的,所以当你打印数组时,所有的 0 将排在第一个。如何解决这个问题? 只需使用您需要的确切位置数声明合并数组,这样您就不会有 0,并且这个数字是 size= size1+size2,就像您在代码中所做的那样。如果有什么不清楚的,可以问我。希望对您有所帮助

      import java.util.Arrays;
      import java.io.*;
      import java.util.Scanner;
      
      public class leetcode4Again {
          public static void main(String args[]) throws IOException {
              int a[] = new int[50];
              int b[] = new int[50];
      
              int count = 0, size1, size2, size;
              int i = 0, k;
      
              Scanner scan = new Scanner(System.in);
      
              System.out.print("Enter Array 1 Size : ");
              size1 = scan.nextInt();
      
              System.out.print("Enter Array 1 Elements : ");
              for (i = 0; i < size1; i++) {
                  a[i] = scan.nextInt();
              }
      
              System.out.print("Enter Array 2 Size : ");
              size2 = scan.nextInt();
      
              System.out.print("Enter Array 2 Elements : ");
              for (i = 0; i < size2; i++) {
                  b[i] = scan.nextInt();
              }
              size = size1 + size2; //change
              int merge[] = new int[size]; //change
              System.out.print("Merging the Arrays...\n");
              for (i = 0; i < size1; i++) {
                  merge[i] = a[i];
              }
      
              for (i = 0, k = size1; k < size && i < size2; i++, k++) {
                  merge[k] = b[i];
              }
              Arrays.sort(merge);
              System.out.print("Now the New Array after Merging is :\n");
              for (i = 0; i < size; i++) {
                  System.out.print(merge[i] + "  ");
              }
          }
      }
      

      【讨论】:

        【解决方案4】:

        查看此链接,它正确解释了如何合并两个数组并打印它们,您需要先在互联网上搜索此类问题,已经有很多示例可用 https://www.tutorialspoint.com/javaexamples/arrays_merge.htm
        您的代码的问题是在排序后 0 出现在长度为 100 的数组的开头,并且您只打印前几个元素,但是,请参阅上面的链接以执行此类任务

        【讨论】:

          猜你喜欢
          • 2023-03-18
          • 2016-09-23
          • 2020-10-31
          • 1970-01-01
          • 2020-08-09
          • 2021-07-03
          • 1970-01-01
          • 1970-01-01
          • 2022-10-04
          相关资源
          最近更新 更多