遇到感觉很好的数组问题跟大家分享一下
1.现在有如下的一个数组:
int[] arr = {1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
要求将以上数组中值为0的项去掉,将不为0的值存入一个新的数组,生成的新数组为:
int[] arr1 = {1,3,4,5,6,6,5,4,7,6,7,5};
private static void fun1() {
int[] arr = {1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5} ;
int count=0;
//遍历数组arr,得到arr里面的数
for (int i = 0; i <arr.length ; i++) {
//如果arr里面的数不等于0,那么count自增
if(arr[i]!=0){
count++;
}
}
//定义一个新数组,数组长度为count,因为里面有多少个不为0的数,count就自增多少次
int[] arr1 =new int[count];
//遍历数组arr,得到arr里面的数
for (int i = 0,j=0; i <arr.length ; i++) {
//如果arr里面的数不等于0,就把arr数组里面不为0的数,赋值到arr1里面
if(arr[i]!=0){
//因为j是0开始所以把里面的数赋值dao,从下标0,开始,一直到没有数再赋进去
arr1[j]=arr[i];
j++;
}
}
System.out.print("新数组为:");
for (int i = 0; i < count; i++) {
System.out.print(arr1[i]+" ");
}
}
2.现在给出两个数组:
数组a:“1,7,9,11,13,15,17,19,20,6”
数组b:“2,4,6,8,10”
两个数组合并为数组c。
private static void fun() {
int[] a = {1, 7, 9, 11, 13, 15, 17, 19,20,6};
int[] b = {2, 4, 6, 8, 10};
//定义一个变量,给它赋值为两个数组长度之和
int m = a.length + b.length;
int j = 0,temp;
//定义一个新数组,长度m
int[] c = new int[m];
//遍历a的数组,得到a数组里面的数
for (int i = 0; i < a.length; i++) {
//把a数组里面的数赋值给新数组里面
c[i] = a[i];
}
//i=a.length 因为a里面的数到c数组里面了,所以i要等于a的长度开始填
for (int i = a.length; i < m; i++) {
//把b里面的数赋值给c数组里面
c[i] = b[j];
j++;
}
//冒泡排序,有不懂的,可以到我的循环,冒泡排序里面看看
for(int i=0;i<m-1;i++){
for(int s=0;s<m-1-i;s++){
if(c[s]>c[s+1]){
temp=c[s];
c[s]=c[s+1];
c[s+1]=temp;
}
}
}
for (int i = 0; i < m; i++) {
System.out.print(c[i] + " ");
}
}
3.利用冒泡排序实现数组长度为10的特定排序:1-5升序,6-10降序
private static void fun2() {
int[] arr={100,99,88,77,123,1000,1,2,3,1001};
int[] arr1=new int[5];
int[] arr2=new int[5];
//分割数组
//遍历arr1数组里面的数,得到他们
for(int i=0;i<arr1.length;i++){
//把arr数组里面的数赋值给arr1,因为arr1定义了长度,所以只能赋值5个
arr1[i]=arr[i];
}
//i从数组后面开始,把后面arr数组里面的数赋值到arr2中
for(int i=arr.length-1;i>arr2.length-1;i--){
arr2[arr.length-i-1]=arr[i];
}
//冒泡排序 有不懂的,可以到我的循环,冒泡排序里面看看
for(int i=0;i<arr1.length-1;i++){
for(int j=0;j<arr1.length-1;j++){
if(arr1[j]>arr1[j+1])
{
int sum=arr1[j];
arr1[j]=arr1[j+1];
arr1[j+1]=sum;
}
}
}
//冒泡排序 有不懂的,可以到我的循环,冒泡排序里面看看
for(int i=0;i<arr2.length-1;i++){
for(int j=0;j<arr2.length-1;j++){
if(arr2[j]<arr2[j+1])
{
int sum=arr2[j];
arr2[j]=arr2[j+1];
arr2[j+1]=sum;
}
}
}
//合并数组
int[] arrAll=new int[arr.length];
//i等于arrAll一半,遍历arrAll一半的数,得到他们
for(int i=arrAll.length/2;i<arrAll.length;i++){
//遍历arrAll一半的数,得到他们,并赋值到arrAll数组里面
for(int j=0;j<arrAll.length/2;j++){
arrAll[j]=arr1[j];
}
//把arr2数组里面的数赋值到arrAll数组里面
arrAll[i]=arr2[i-arrAll.length/2];
}
System.out.println("原数组为"+Arrays.toString(arr));
System.out.println("排序后为"+Arrays.toString(arrAll));
}