黑马程序员技术交流社区
标题:
关于new一个新数组的新手解决办法(容易理解,非常实用)
[打印本页]
作者:
ytblght55
时间:
2013-6-24 01:15
标题:
关于new一个新数组的新手解决办法(容易理解,非常实用)
/*
需求:现有一个数组 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;
}
}
}
}
}
复制代码
作者:
许庭洲
时间:
2013-6-25 21:00
值得学习ing!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2