- /*
- 需求:现有一个数组 int arr[]={1, 3 , 5 , 0 , 9 , 7 , 0 , 2 , 6 ,0}
- 将上面数组中为0的项去掉,将不为0的元素存入一个新的数组中。
- 新的数组为: int arr2[]={9 , 7 ,6 , 5 , 3 , 2 ,1};
- 思路:定义2个方法 A,首先去除数组中为0的下脚标,用for循环遍历数组,使用if判断语句,如果为0不打印该数组
- B,通过第一个for循环得到非0的角标数,再定义一个for循环,将arr[]非0的角标重新定义
- B,定义一个方法实现数组的排序功能
- */
- class Demo4
- {
- public static void main(String[] args)
- {
- int arr[]={1, 3 , 5 , 0 , 9 , 7 , 0 , 2 , 6 ,0};
- show(arr);
- newarr(arr);
- }
- //这是一个show函数,打印函数
- public static void show(int [] arr)
- {
- for (int x=0;x<arr.length ;x++ )
- {
- System.out.print(arr[x]+" ");
- }
- System.out.println();
- }
- //这是一个去除数组中为0的元素的函数,并且用一个新的数组来记录该值
- public static void newarr(int [] arr)
- {
- int i=0;//i用来记录非0元素的角标数量
- for (int x=0;x<arr.length;x++ )//遍历数组,通过if判断语句来确定该元素是否为0
- {
- if (arr[x]==0)
- {
- continue;//如果元素为0中断当前操作,回到for循环,继续遍历数组
- }
- else
- {
- i++;//i这是非0的角标的数量
- }
- }
- int []arr2=new int[i];//定义一个新的数组来记录
- int j=0;//j是用来记录新数组的角标
- for (int k=0;k<arr.length;k++ )//遍历原数组的元素
- {
- if (arr[k]==0)//如果元素中出现0直接跳出,如果不等于0,那么我们用j来记录不是0的角标值,j是从0角标开始记录原数组中的非0元素的角标
- {
- continue;
- }
- else
- {
- arr2[j]=arr[k];//j=0,用新数组0角标来记录原数组非0角标的值
- j++;//j每次递增一次
- }
- }
- sort(arr2);//这是一个排序的方法
- show(arr2);//这是一个show方法
- }
- //这是一个选择排序的方法
- public static void sort(int arr[])
- {
- for (int x=0;x<arr.length ;x++ )//外循环控制行,因为选择排序每次比较元素的个数都会减少一次
- {
- for (int y=x;y<arr.length ;y++ )//内循环控制对比的次数,当x=0时,arr[x],y要从第二个角标元素开始追个元素比较,确定最小值
- {
- if (arr[x]<arr[y])//比较,如果写成>那么就是按从大到小的方式排序
- {
- int temp=arr[x];//换位的思维,通过temp第三方变量来记录一个值,实现x,y的换位
- arr[x]=arr[y];
- arr[y]=temp;
- }
- }
- }
- }
- }
复制代码 |