A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. /*

  2. 需求:现有一个数组 int arr[]={1, 3 , 5 , 0 , 9 , 7 , 0 , 2 , 6 ,0}
  3. 将上面数组中为0的项去掉,将不为0的元素存入一个新的数组中。
  4. 新的数组为: int arr2[]={9 , 7 ,6 , 5 , 3 , 2 ,1};

  5. 思路:定义2个方法 A,首先去除数组中为0的下脚标,用for循环遍历数组,使用if判断语句,如果为0不打印该数组
  6. B,通过第一个for循环得到非0的角标数,再定义一个for循环,将arr[]非0的角标重新定义
  7. B,定义一个方法实现数组的排序功能
  8. */
  9. class Demo4
  10. {
  11. public static void main(String[] args)
  12. {
  13. int arr[]={1, 3 , 5 , 0 , 9 , 7 , 0 , 2 , 6 ,0};
  14. show(arr);
  15. newarr(arr);


  16. }
  17. //这是一个show函数,打印函数
  18. public static void show(int [] arr)
  19. {
  20. for (int x=0;x<arr.length ;x++ )
  21. {
  22. System.out.print(arr[x]+" ");
  23. }
  24. System.out.println();
  25. }
  26. //这是一个去除数组中为0的元素的函数,并且用一个新的数组来记录该值
  27. public static void newarr(int [] arr)
  28. {
  29. int i=0;//i用来记录非0元素的角标数量
  30. for (int x=0;x<arr.length;x++ )//遍历数组,通过if判断语句来确定该元素是否为0
  31. {
  32. if (arr[x]==0)
  33. {
  34. continue;//如果元素为0中断当前操作,回到for循环,继续遍历数组
  35. }
  36. else
  37. {
  38. i++;//i这是非0的角标的数量
  39. }
  40. }
  41. int []arr2=new int[i];//定义一个新的数组来记录
  42. int j=0;//j是用来记录新数组的角标
  43. for (int k=0;k<arr.length;k++ )//遍历原数组的元素
  44. {

  45. if (arr[k]==0)//如果元素中出现0直接跳出,如果不等于0,那么我们用j来记录不是0的角标值,j是从0角标开始记录原数组中的非0元素的角标
  46. {
  47. continue;
  48. }
  49. else
  50. {
  51. arr2[j]=arr[k];//j=0,用新数组0角标来记录原数组非0角标的值
  52. j++;//j每次递增一次
  53. }
  54. }
  55. sort(arr2);//这是一个排序的方法
  56. show(arr2);//这是一个show方法

  57. }
  58. //这是一个选择排序的方法
  59. public static void sort(int arr[])
  60. {
  61. for (int x=0;x<arr.length ;x++ )//外循环控制行,因为选择排序每次比较元素的个数都会减少一次
  62. {
  63. for (int y=x;y<arr.length ;y++ )//内循环控制对比的次数,当x=0时,arr[x],y要从第二个角标元素开始追个元素比较,确定最小值
  64. {
  65. if (arr[x]<arr[y])//比较,如果写成>那么就是按从大到小的方式排序
  66. {
  67. int temp=arr[x];//换位的思维,通过temp第三方变量来记录一个值,实现x,y的换位
  68. arr[x]=arr[y];
  69. arr[y]=temp;
  70. }
  71. }
  72. }
  73. }
  74. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
张勇1993 + 1 很给力!

查看全部评分

1 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马