数组的内存划分、长度、遍历、取最值以及反转(思路非常详细)

  数组的长度

获取一个数组的长度:格式:

数组的名称+length

数组一旦被创建,程序运行期间,其长度不可以改变

*/

public class ZY01 {

    public static void main(String[] args) {

              int[] arrayA={1,2,3};

              int[] arrayB=new int[3];

              int len=arrayA.length;

扫描二维码关注公众号,回复: 13736486 查看本文章

              System.out.println("您得到的数组的长度是:"+len);

              System.out.println("============");

              int[] arrayc=new int[3];

              System.out.println(arrayc.length);

              arrayc=new int[5];

              System.out.println(arrayc.length);

       }

}

运行截图:

运行截图一个是3,一个是5,因为我们new了两个数组(具体代码和解释如下:)    

int[] arrayc=new int[3];

              System.out.println(arrayc.length);

              arrayc=new int[5];

              System.out.println(arrayc.length);

  数组的遍历输出

遍历数组:说的是对数组中的每一个元素进行逐一、挨个的处理,默认的处理方式打出

*/

public class ZY01 {

    public static void main(String[] args) {

              int[] arrayA={1,2,3,4};

              for(int i=0;i<3;i++){//这里不改就少一个

              System.out.println(arrayA[i]);

              }

              System.out.println("================");

              int len=arrayA.length;//长度,能自动的告诉你有多少个

              for(int i=0;i<arrayA.length;i++){

                     System.out.println(arrayA[i]);

              }

       }

}

/*

数组的最大值最小值

实现的思路(以最大值为例,最小值则实现的思路与最大值相反):

  1. 定义变量,保存数组0索引上的元素
  2. 遍历数组,遍历数组中的每个元素
  3. 将遍历的数组与索引的数组比较
  4. 如果数组的数大于了数组的值,就记录新的变量值
  5. 数组循环遍历,最后变量中保存的值就是最大值

这里我们用火柴人比武打擂台赛来讲解

  1. 首先有五个火柴人,战斗力分别是5,15,30,20,100

     

  2. 接着摆个擂台,从0号元素战五渣开始,战五渣不需要给自己比,(for循环里面int i=0;)

  3. 然后从二号火柴人依次比武,设牛掰谁留下,最后的那位是老大。(for循环+if语句)

    (1)

 (2)

 

(3) 

(4)

*/

public class ZY01 {

    public static void main(String[] args) {

              int[] array={5,15,30,20,100};

              int max=array[0];//摆一个擂台,战五渣先上,战五渣不需要给谁比(也就是数组里的0号元素)

              for(int i=1;i<array.length;i++){ //如果这里i=0的也对(常规操作战五渣不能跟战五渣自己打,不然战五渣就成了智五渣了)

                     if(array[i]>max){ //如果当前元素比现有的max大,那么就要换成当前元素

                            max=array[i];

                     }

              }

              System.out.println("最大值:"+max);

              System.out.println("======================");

              int min=array[0];

              for(int i=1;i>array.length;i++){

                     if(array[i]>min){

                            min=array[i];

                     }

              }

              System.out.println("最小值:"+min);

       }

}

运行截图:

/*

                              数组元素的反转

(这是要掌握的总图,下面是分解)

(1)数组元素的反转其实就是对称位置的元素交换

(2)通常数组遍历的时候只需要一个索引,现在位置对换需要连个索引

     int min=0;(初始长度)

        int max=array.length-1;(长度-1)

(3)如何交换变量

      int a=10;

         int b=20;

         ==============

         int tmp=a;

         a=b;           

         b=tmp;                                       (交换的步骤)

关于转换的图解:(奇数项)

(1)min和max对称

(2)都迈一步,元素交换,当元素交换的

         (3)(如果再往前min和max会相撞,此时min和max都指向【2】,所以要考虑什么时候停止交换[解决方法参考第四点])

关于转换的图解:(偶数项) 

 

 

 

 上图如果再走就会擦肩而过,接着交换,就会把原本交换好的数在交换回来(如下图)

因此以上两种情况都要考虑什么时候停止交换,什么时候应该交换,具体交换条件如下:

(4)什么时候停止交换:

1)min==max;

2)min>max;

什么时候应该交换

1)min<max;

*/

public class ZY01 {

    public static void main(String[] args) {

              int[] array={1,2,3,4,5};

//遍历打印数组本来的样子

              for(int i=0;i<array.length;i++){

                     System.out.println("正常打印的结果:"+i);

              }

              System.out.println("==============:");

/*

初始化语句:int min=0,max=array.length-1

条件判断:min<max

步进语句:min++,max--

循环体:三变量倒手

*/

              for(int min=0,max=array.length-1;min<max;min++,max--){

                     int tmp=array[min];

                     array[min]=array[max];

                     array[max]=tmp;

              }

              for(int i=0;i<array.length;i++){

                     System.out.println("交换后打印的结果:"+array[i]);

              }

       }

}

运行结果图:

第二张代码的写法可能更好理解:

   Java中内存的划分和数组的内存图

猜你喜欢

转载自blog.csdn.net/weixin_45650003/article/details/119338421