zoukankan      html  css  js  c++  java
  • 0005 数组(array)的静态和动态声明、最大值最小值、数组的反转、复制

    public class test05{
    public static void main(String []args){
    /*
    数组(array):
    简单的说,就是一组数
    当一组数据的数据类型,意义是一样的时候,那么为了方便的统一的管理它们,我们需要
    用新的数据的存储结构来进行存储。例如:数组
    所谓数组(Array),就是相同数据类型的元素按一定顺序排列的集合,
    就是把有限个类型相同的变量用一个名字命名,以便统一管理他们,
    然后用编号区分他们,这个名字称为数组名,编号称为下标或索引(index)。
    组成数组的各个变量称为数组的元素(element)。数组中元素的个数称为数组的长度(length)。
    int[] scores = new int[7];
    scores[0] = 89;
    数组名:例如:scores
    下标:范围:[0,长度-1]
    例如:[0]
    元素:数组名[下标]
    例如:scores[0]
    数组的长度:元素的总个数,可以这么表示: 数组名.length
    */
    //实例
    /*
    要存储本组学员的成绩,例如:第1组,有7个同学
    */
    /*
    int score1 = 89;
    int score2 = 89;
    int score3 = 67;
    int score4 = 99;
    int score5 = 89;
    int score6 = 34;
    int score7 = 89;
    //用7个变量存储没问题,但是如果涉及到对数据的管理:例如,求最值,排序等,就非常麻烦
    */
    //所以使用数组
    /*
    int[]scores=new int[7];
    scores[0] = 89;
    scores[1] = 89;
    scores[2] = 67;
    scores[3] = 99;
    scores[4] = 89;
    scores[5] = 34;
    scores[6] = 89;
    System.out.println(scores.length);*/
    //----------------------------------------------------
    /*
    原则:先声明后使用
    1、声明一个数组?
    语法格式;
    元素的数据类型[] 数组名;
    例如:
    存储几个学员的成绩:int[] scores;
    存储几个学员的体重:double[] weights;
    存储几个学员的姓名:String[] names;

    2、 数组的初始化?
    需要完成两件事:
    (1)确定数组的长度
    (2)确定数组的元素的值

    方式一:静态初始化
    数组名 = new 元素的数据类型[]{元素的值列表};

    说明:如果数组的声明与静态初始化合成一句时
    元素的数据类型[] 数组名 = new 元素的数据类型[]{元素的值列表};
    甚至还可以简化:当且仅当,声明与静态初始化在一句时,才能这么简化
    元素的数据类型[] 数组名 = {元素的值列表};
    方式二:动态初始化

    3、如何表示一个数组的元素
    数组名[下标]
    下标的范围:[0,长度-1]

    4、如何表示数组的长度
    数组名.length

    5、遍历/访问数组中的元素
    for(int i=0; i<数组名.length; i++){
    Ssytem.out.println(数组名[i]);
    }

    回忆:
    变量的声明与使用
    (1)变量的声明
    数据类型 变量名;
    (2)变量的初始化
    变量名 = 变量值;

    声明和初始化合成一句
    数据类型 变量名 = 变量初始值;
    */
    int[]socres = {60,65,70,90,80};
    //输出数组的长度,已经遍历数组
    System.out.println(socres.length);
    for(int i=0;i<socres.length;i++){
    System.out.println(socres[i]);
    }

    //-------------------------------------------------------

    /*
    数组的存储:
    1、数组下标为什么从0开始?
    下标表示的是这个元素的位置距离首地址的偏移量
    2、数组名中存储的是什么
    数组名中存储的是数组在堆中一整块区域的首地址
    3、数组的元素如何存储
    在堆中,依次连续的存储的
    说明:
    数组名,其实也是变量。
    回忆:
    变量的声明和初始化
    数据类型 变量名 = 变量值;
    现在:
    int[] array = {1,3,5,7,9};
    其中的 int[]也是一种数据类型,数组类型,它是一种引用数据类型

    引用,表示引用一个“对象”,引用堆中的一块内存
    Java程序是在JVM中运行,JVM中的内存最最主要的两块区域:栈和堆
    其中的栈就是存储我们的局部变量(现在见到的变量都是局部变量),
    堆中存储的是对象
    */

    //实例
    int [] array=new int[]{1,3,5,7,9};
    System.out.println(array);//打印数组名
    ////结果只打印出了:[I@15db9742
    //这个值是,数组对象的类型@对象的hasCode编码值
    //其中[I,表示int[]类型
    //15db9742是这个数组对象的hashCode编码值,类似于每个人都有一个身份证号

    //----数组中求最大值、最小值、平均值-----------------------------------------------------
    int[] array = {4,2,6,8,9};
    //最大值[特别注意]需要一个temp 变量来存储最大值

    //方式1
    int max=-1;
    for(int i=0;i<array.length-1;i++ ){
    if(array[i]>array[i+1]){
    max=array[i];
    }else{
    max=array[i+1];
    }
    }
    System.out.println(max);

    //方式2

    //在数组中找最大值
    //类似于:猴子掰玉米
    //先假设第一个最大,然后与后面的元素一一比较,如果有比手上还大,就修改手上的玉米
    //(1)//先假设第一个元素最大
    int max = array[0];
    //(2)用max中的值,与后面的元素一一比较,如果有比max的值还大,就修改max的值
    //这里i=1的原因,max与[1,长度-1]的元素比较就可以了,不用再与[0]元素进行比较
    for(int i=1; i<array.length; i++){
    if(array[i] > max){
    max = array[i];
    }
    }
    System.out.println("最大值是:" + max);

    int[] array = {4,2,-7,8,1,9};
    //最小值及其下标
    //(1)假设第一个元素最小
    int minIndex = 0;//array[minIndex]就是最小值

    //(2)用min与后面的元素一一比较
    for(int i=1; i<array.length; i++){
    if(array[i] < array[minIndex]){
    minIndex = i;
    }
    }
    System.out.println("最小值是:" + array[minIndex]);
    System.out.println("最小值的下标是:" + minIndex);

    */
    //练习
    /*
    有一组学员的成绩存储在数组中,统计总分和平均分
    */
    int[] scores = {78,89,56,99,100};
    //总分:
    int sum=0;
    for(int i=0;i<scores.length;i++){
    sum+=scores[i];
    }
    System.out.println("总分是"+sum);
    //平均分
    System.out.println("平均分是"+sum/scores.length);

    //人数就是数组的长度
    /*

    /*
    程序:
    (1)数据结构:如何存储数据
    (2)算法:实现功能的代码的逻辑结构

    数组的相关的算法操作:
    1、在数组中找最大值/最小值
    2、在数组中找最大值/最小值及其下标
    3、数组的元素累加和及平均值
    4、数组的反转
    */
    //数组的反转
    //有一个数组,存储26个字母
    char[] letters=new char[26];
    for(int i=0;i<26;i++){
    letters[i]=(char)('A'+i);
    //赋值后立刻输出看一下
    System.out.println(letters[i]);
    }
    //反转
    //原来letters[0]中存储的是'A'-->现在letters[0]中存储的是'Z'
    //...
    //原来letters[25]中存储的是'Z'-->现在letters[25]中存储的是'A
    System.out.println("-----------反转-----------------------------------");
    //思考需要交换几次

    //方式1
    char[] temp=new char[26];
    for(int i=0;i<letters.length;i++){
    temp[letters.length-1-i]=letters[i];
    }
    letters=temp;
    //再输出反转后的数据
    for(int i=0;i<letters.length;i++){
    System.out.println(letters[i]);
    //方式2

    //问题1:交换几次 次数 = 长度/2 例如:6个元素交换3次,5个元素交换2次
    /*
    这个i可以用作下标,同时循环的次数,可以表示交换的次数
    */
    for(int i=0; i<letters.length/2; i++){
    //问题2:谁和谁交换
    //letters[0] ~ letters[25]
    //letters[1] ~ letters[24]
    //..
    //首尾交换
    //letters[i] ~ letters[长度-1 - i]

    //问题3:如何交换
    //借助第三个变量
    char temp = letters[i];
    letters[i] = letters[letters.length-1-i];
    letters[letters.length-1-i] = temp;
    }
    //显示结果
    for(int i=0; i<letters.length; i++){
    System.out.println(letters[i]);
    }

    //数组的复制---------------------------------------------
    /*
    程序:
    (1)数据结构:如何存储数据
    (2)算法:实现功能的代码的逻辑结构

    数组的相关的算法操作:
    1、在数组中找最大值/最小值
    2、在数组中找最大值/最小值及其下标
    3、数组的元素累加和及平均值
    4、数组的反转
    5、数组的复制
    (1)复制一个和原来一样的数组,长度和元素
    (2)复制一个比原来数组短的
    例如:从原数组中截取一部分
    (3)复制一个比原来的长的
    例如:数组扩容,那么新数组会比原来的数组长
    */
    //(1)复制一个和原来一样的数组,长度和元素
    int[] arr={1,2,3,4};
    //创建一个新数组,和原来长度不一样也可
    int[] arrCopy=new int[0];
    arrCopy=arr;
    //遍历新数组
    for(int i=0;i<arrCopy.length;i++){
    System.out.println(arrCopy[i]);
    }
    //方式2
    //再创立一个数组,长度和原来一致即可
    int []arrCopyTwo=new int[arr.length];
    //复制元素
    for(int i=0;i<arrCopyTwo.length;i++){
    arrCopyTwo[i]=arr[i];
    }
    //遍历新数组
    System.out.println("------------------------"
    );
    for(int i=0;i<arrCopyTwo.length;i++){
    System.out.println(arrCopyTwo[i]);
    }

    //方式3 复制一个比原来长的数组-----------------------------------------------------
    int[] arrCopyThree=new int[arr.length*2];
    //复制元素:错误示例

    //for(int i=0;i<arrCopyThree.length;i++){
    // arrCopyThree[i]=arr[i];//[特别注意。这样是会报错的]
    //}
    //复制元素:正确示例
    for(int i=0;i<arr.length;i++){
    arrCopyThree[i]=arr[i];//[特别注意。这样是会报错的]
    }
    //遍历结果
    System.out.println("------------------------");
    for(int i=0;i<arrCopyThree.length;i++){
    System.out.println(arrCopyThree[i]);
    }
























    }
    }

  • 相关阅读:
    关于UI设计的文章汇总
    Linq 中不爽之处
    难题autoconf、automake、libtool
    静态构造函数线程安全的几个版本[转载]
    Window Live Writer
    Guid、Int、BigInt编号的速度和存储空间的比较
    MVP模式中的P和V关系
    LR 剖析器
    快速软件开发 学习笔记 之七
    快速软件开发 学习笔记 之六
  • 原文地址:https://www.cnblogs.com/liliang07/p/13277100.html
Copyright © 2011-2022 走看看