从键盘输入两个长度不一样的数组,然后怎么把他们合并在一个里面,按从小到大的输出?java的,求代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从键盘输入两个长度不一样的数组,然后怎么把他们合并在一个里面,按从小到大的输出?java的,求代码相关的知识,希望对你有一定的参考价值。

public static void main(String[] args) throws Exception 
        java.io.BufferedReader br = new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
        System.out.println("请输入数组1的大小:");
        int len1 = Integer.parseInt(br.readLine());//数组长度
        System.out.println("请输入数组2的大小:");
        int len2 = Integer.parseInt(br.readLine());//数组长度
        int[] a = new int[len1 + len2];
        int[] b = new int[len2];
        
        //java.util.Scanner sc = new java.util.Scanner(System.in);//照顾到JDK1.5以前的用户,用上面的方法,
        System.out.println("请输入" + len1 + "组数字来初始化数组 a:");
        int c = 0;
        String tmp;
        while (c < len1) 
            try 
                tmp = br.readLine();
                int d = Integer.parseInt(tmp.trim());
                a[c++] = d;
             catch (Exception e) 
                System.out.println("请输入有效的整数!");
                continue;
            
        
        System.out.println("请输入" + len2 + "组数字来初始化数组 b:");
        c = 0;
        while (c < len2) 
            try 
                tmp = br.readLine();
                int d = Integer.parseInt(tmp.trim());
                b[c++] = d;
             catch (Exception e) 
                System.out.println("请输入有效的整数!");
                continue;
            
        
        System.out.println("正在合并数组:");
        for (int i = 0; i < len2; i++) 
            a[i+len1] = b[i];
        
        Thread.sleep(500);
        System.out.println("正在排序数组:");
        java.util.Arrays.sort(a);
        Thread.sleep(500);
        System.out.println("正在输出数组内容(从大到小):");
        for (int i = 0; i < len1 + len2; i++) 
            System.out.print(a[i] + " ");
        
        System.out.println();
    

追问

你做的太复杂了

参考技术A 从键盘输进去的只能是一个字符串吧。
用StringBuilder将两个字符串接起来。
然后 数组???键盘敲进去的都是数字么??
桥数字的时候加空格,
然后将StringBuilder转成字符串,用 split(" ")切成数组,
最后数组排序就行了。
参考技术B 直接合并的话,Java 有 System.arrayCopy()
不过,你貌似合并完之后,还需要排序吧
排序你可以自己写算法,也可以用 TreeMap 之类的做追问

这个是用来专门合并数组的吗

追答

arrayCopy 顾名思义,是数组复制,当然能用来做合并

算法 - 合并两个有序数组成一个有序数组

最近看到一个算法题目,觉得很有意义,就自己查资料,摸索着自己实现了代码,特记录一下。

题目:有两个数组a[]和b[],将它们合并成数组c[],需要c[]也是有序数组。

有两种实现思路:

1. 定义一个新数组,长度为两个数组长度之和,将两个数组都copy到新数组,然后排序。

2. 给两个数组分别定义一个下标,最大长度是数组长度减一,按位循环比较两个数组,较小元素的放入新数组,下标加一(注意,较大元素对应的下标不加一),直到某一个下标超过数组长度时退出循环,此时较短数组已经全部放入新数组,较长数组还有部分剩余,最后将剩下的部分元素放入新数组,大功告成。

第一种方式应该是大多数人想到的,也比较容易实现,下面主要来实现第二种方式。

代码如下:

技术分享图片

public static int[] MergeList(int a[],int b[])
{
int result[];
// 定义一个新数组,长度为两个数组长度之和
result = new int[a.length+b.length];
//i:a数组下标 j:b数组下标 k:新数组下标
int i=0,j=0,k=0;
// 按位循环比较两个数组,较小元素的放入新数组,下标加一(注意,较大元素对应的下标不加一),直到某一个下标等于数组长度时退出循环
while(i<a.length && j<b.length)
if(a[i] <= b[j]) {
result[k++] = a[i++];
print(result);
System.out.println();
}else{
result[k++] = b[j++];
}
/* 后面连个while循环是用来保证两个数组比较完之后剩下的一个数组里的元素能顺利传入 *
* 此时较短数组已经全部放入新数组,较长数组还有部分剩余,最后将剩下的部分元素放入新数组,大功告成*/
while(i < a.length)
result[k++] = a[i++];
while(j < b.length)
result[k++] = b[j++];
return result;
}


技术分享图片























以上是关于从键盘输入两个长度不一样的数组,然后怎么把他们合并在一个里面,按从小到大的输出?java的,求代码的主要内容,如果未能解决你的问题,请参考以下文章

从键盘输入n个整数,求它们的最小公倍数

编写一个c程序,从键盘输入任意一个五位数,把这个数值分解为单个数字,然后打印出每个数字并且每个数字

从两个排序数组中获取前 K 项而不合并它们

表格怎么把一样的内容合并

快排和并归

bzoj 1260涂色 题解