import java.util.Arrays;
/**
* 1.数组a={2,3,8,15}和数组b={1,3,20,21,23},
* 数组a和数组b都是升序排列的,
* 放到数组c中没能有重复,不能使用任何库函数,
* 除println,print
* 最简洁的代码实现。
* 2.实现Arrays类的copyOf方法和toString方法,
* 必须使用StringBuilder。
*
*/
public class arrayshu {
public static void main(String[] args) {
//创建三个数组
int[] a={2,3,8,15};
int[] b={1,3,20,21,23};
int[] c=new int[a.length+b.length];
int m=0,n=0;
//c数组中重复的个数
int len=0;
//遍历c数组
for(int i=0;i<c.length;i++){
//临时越界条件
boolean flag=m<a.length&&n<b.length;
//满足非越界条件
if(flag&&a[m]<=b[n]){
//不管小于等于都赋值给c数组,并a数组下标加一
c[i]=a[m++];
//判断相等的情况
if(b[n]==c[i]){
//c数组中重复的个数加一
len++;
//b数组下标加一
n++;
}
}//已下部分已优化被注释
/*else if(flag&&a[m]==b[n]){
c[i]=a[m++];
n++;
}*/else{
//数组b没有遍历完,则给a数组赋值
if(n<b.length){
c[i]=b[n++];
}//if else if达到互斥效果,原理同上。
else if(m<a.length){
c[i]=a[m++];
}
}
}
System.out.println(toString(copyOf(c,len)));
}
/**
* Arrays.toString(arr)
* @param arr
* @return
*/
public static String toString(int[] arr) {
StringBuilder str=new StringBuilder("");
str.append("[");
for(int i=0;i<arr.length;i++){
if(i<arr.length-1){
str.append(arr[i]+",");
}else{
str.append(arr[i]);
}
}
str.append("]");
return str.toString();
}
/**
* //Arrays.copyOf(c,len)
* @param arr
* @param len
* @return
*/
public static int[] copyOf(int[] arr,int len) {
if(len<0||len>arr.length){
throw new IndexOutOfBoundsException();
}
int[] arrtemp=new int[arr.length-len];
for(int i=0;i<arrtemp.length;i++){
arrtemp[i]=arr[i];
}
return arrtemp;
}
}