JAVA数组合并请高手指教

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA数组合并请高手指教相关的知识,希望对你有一定的参考价值。

public class C
public static void main(String[] args)
int [] a1=20,40,50,70,90;
int [] a2=10,30,40,60,80;
int [] a3=new int[a1.length+a2.length];
for(int i=0;i<a1.length;i++)
a3[i]=a1[i]; //将a1[i]放入a3[]i中
for(int j=0;j<a2.length;j++)
a3[a3.length-j]=a2[a2.length-j]; //将a2[i]放入a3[i]中
for(int i=0;i<a3.length;i++)
System.out.print("a3[i]"+a3[i]+" "); //输出a3[i]
System.out.println();
/**将a3[i]按从小到大排序
*/
int t=a3[i];
if(a3[i]>a3[i-1])
a3[i]=a3[i-1];
a3[i-1]=t;

System.out.print("a3[i]="+a3[i]+" "); //输出a3[i]

System.out.println();

a3[a3.length-j]=a2[a2.length-j]; //将a2[i]放入a3[i]中
改为a3[a3.length-j-1]=a2[a2.length-j-1];
否则数组会溢出
至于排序,你是不是想用插入排序啊,你写的不太对头,我把排序重写一遍
public class C
public static void main(String[] args)
int[] a1 = 20, 40, 50, 70, 90 ;
int[] a2 = 10, 30, 40, 60, 80 ;
int[] a3 = new int[a1.length + a2.length];
for (int i = 0; i < a1.length; i++)
a3[i] = a1[i];

for (int j = 0; j < a2.length; j++)
a3[a3.length - j - 1] = a2[a2.length - j - 1];

for (int i : a3)
System.out.println(i);//排序前输出a3

for (int i = 1; i < a3.length; i++)
if (a3[i - 1] > a3[i])
int tmp = a3[i];
int j = i - 1;
do
a3[j + 1] = a3[j];
j--;
while (j >= 0 && tmp < a3[j]);//当j>=0并且 当前值大于数据中j位置的值时移动
a3[j + 1] = tmp; //插入排序值


System.out.println("after sort:")
for (int i : a3)
System.out.println(i);//排序后输出a3

System.out.println();

参考技术A for(int j=0;j<a2.length;j++)
a3[a3.length-j]=a2[a2.length-j]; //将a2[i]放入a3[i]中

你这里有问题:索引会超出范围的了。
当j=0时
a3[a3.length-j]和a2[a2.length-j]都是索引超出范围的了。
就相当于a3[a3.length]和a2[a2.length]了,就超出索引范围,就会出错了,
修改办法:
将j从1开始,到a2.length

for(int j=1;j<=a2.length;j++)
a3[a3.length-j]=a2[a2.length-j]; //将a2[i]放入a3[i]中
参考技术B for(int j=0;j<a2.length;j++)
==>
for(int j=0;j<a1.length+a2.length;j++)
参考技术C 单类型,多个数组合并,可以参考我提供的代码。
import java.util.Arrays;

public class C
/**
* @param args
*/
public static void main(String[] args)
int[] a1 = 20, 40, 50, 70, 90 ;
int[] a2 = 10, 30, 40, 60, 80 ;
int[] a3 = new C().mergeArrays(new Object[] a1, a2 );//任意多个数组都可以
Arrays.sort(a3);// 升序排序
for(int a:a3)
System.out.println(a);



/**
* 合并数组
* 先求得大数组的总长度
* @return 合并后的数组
*/
public int[] mergeArrays(Object[] obj)
int[] new_a3 = new int[getArraysLength(obj)];
int index = 0;
for(Object objs:obj)
for(int a:(int[])objs)
new_a3[index] = a;
index++;


return new_a3;


/**
* 求需要合并数组的总长度
* @param obj
* @return 总长度,-1:obj为无效数组
*/
public int getArraysLength(Object[] obj)
int length = 0;
if (obj != null && obj.length > 0)
for (Object objs : obj)
length = length+((int[]) objs).length;

return length;

return -1;


struts中的一条for语句,看不懂,请高手指教。

String[] forwardnames = mapping.findForwards();
for(String forwardname:forwardnames)
Actionforward forward = mapping.findforward(forwardname);
String path = fordward..getpath();

":"前边是一个数据类型的变量,后边是一个集合(包含数组、list、map等都可以元素类型跟前边的数据类型一样就行了)。
例如:int[] a = int[10]; ----> for(int i:a)(i为a中的一个元素)
List<Integer> l = new ArrayList<Integer>();---->for(Integer i:l)(i为l中的一个元素)
Map<String,Integer> m=new HashMap<String,Integer>()
for(String s:m.keySet())(s为m中的一个key值)
for(Integer i:m.values())(i为m中的一个value值)...
这是JDK1.5的新特性挺好用的。
参考技术A 这个是jdk1.5的语法,方便遍历 在jdk1.4就是这样的

for(int i=0;i<forwardnames.length;i++)
String forwardname=forwardnames[i];
Actionforward forward = mapping.findforward(forwardname);
String path = fordward.getpath();


一样的效果的,但是用foreah语句更方便。。

以上是关于JAVA数组合并请高手指教的主要内容,如果未能解决你的问题,请参考以下文章

C语言合并两个数组

excel 单元格里面如何用函数解决多个条件多层嵌套问题,请高手指教,谢谢

C#中Collection集合怎么转换List集合?请高手指教

java数组的合并问题

java String数组合并

java 数组合并