zoukankan      html  css  js  c++  java
  • 尚学堂--Java数组

    元素为基础数据类型数组:

     

     

    元素为引用数据类型数组:

    class Date{
          int year; int moth; int day;
          Date(int y; int m, int d){
            year=y ;
          month=m ;
          day=d ;
      }  
    }

    一维数组:

    声明:

    int arr[];
    int[] arr;
    int arr[5];//错误,java语言中声明数组时不能指定其长度

    创建:

    arr = new int[5];

    初始化:

    静态初始化:定义数组的同时,就为数组元素分配空间并赋值

    int a[] = {1, 2, 3};
    
    Date days[] = {
        new Date(1, 1, 2017),
        new Date(2, 1, 2017),
        new Date(3, 1, 2017)
    };

    动态初始化:先定义数组,再为数组元素分配空间和赋值

    int a[];
    a = new int[3];
    a[0] = 1;
    a[1] = 2;
    a[2] = 3;
    
    Date days[];
    days = new Date[3];
    days[0] = new Date(1, 1, 2017);
    days[1] = new Date(2, 1, 2017);
    days[2] = new Date(3, 1, 2017);

    数组元素的默认初始化:

      数组是引用类型(除了基础数据类型之外,java其它的类型全都是引用类型),它的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被隐式初始化

    public class Test {
        public static void main(String[] args) {
            int[] a = new int[3];
            Date[] days = new Date[3];
            System.out.println(a[1]);//输出0
            System.out.println(days[1]); //输出:null
        }
    }
    
    class Date{
        int day,month,year;
        Date(int day, int month, int year) {
            this.day = day;
            this.month = month;
            this.year = year;
        }
    }

    数组元素的引用

    • arrayName[index],index为数组元素的下标,可以是整型常量或整形表达式,例:a[i], a[3], a[6*i]
    • 数组元素下标从0开始,取值范围为 0~n-1
    • a.length的值为数组a的长度(元素个数),length是一个属性,而不是方法,后面不要加括号。(String那个类作为字符串也有length,也有长度,但那是个方法,要区别开来)

    关于String[] args:

    public class Test {
        public static void main(String[] args) {
            int[] a = {1, 2, 3, 4, 5, 6, 7};
            for(int i = 0; i < a.length; i ++) {
                System.out.println(a[i]);
            }
            //for中的i变量跟上面的i变量不冲突,局部变量,出了大括号就不认识了
            for(int i = 0; i < args.length; i ++) {
                System.out.println(args[i]);
            }
        }
    }

    深入理解String[] args:

    public class Test {
        public static void main(String[] args){
            long l = 0;
            long l1 = 0;
            long l2 = 0;
            
            if(args.length != 3) {
                System.out.println("java Test " + ""n1" "op" "n2"");
                System.exit(-1);
            }
    
            try{
                l1 = Long.parseLong(args[0]);//parseLong可能会抛出NumberFormatException
                l2 = Long.parseLong(args[2]);
            }catch(NumberFormatException ex) {
                System.out.println("字符格式错误!");
                ex.printStackTrace();
            }
            
            if(args[1].equals("+")) {
                l = l1 + l2;
            }else if(args[1].equals("-")) {
                l = l1 - l2;
            }else if(args[1].equals("x")) {
                l = l1 *l2;
            }else if(args[1].equals("/")) {
                l = l1 / l2;
            }else {
                System.out.println("The message is not correct!");
                System.exit(-1);
            }
            System.out.println(l);
        }
    }

    练习:

    要求:

    1、命令行上读取多个数字,
    2、构建成int类型的数组,
    3、由大到小排序

    public class Test {
        public static void main(String[] args) {
            //命令参数赋值给数组intArr[]
            int intArr[] = new int[args.length];
            for(int i = 0; i < args.length; i ++) {
                //String类型强制转换成int类型
                intArr[i] = Integer.parseInt(args[i]);
                //System.out.println(intArr[i] + " ");
            }
    
            //对args数组进行从小到大排序
            for(int i = 0; i < intArr.length - 1; i ++){
                for(int j = 0; j < intArr.length - 1 - i; j ++){
                    if(intArr[j] > intArr[j + 1]) {
                        int temp = intArr[j + 1];
                        intArr[j + 1] = intArr[j];
                        intArr[j] = temp;
                    }
                }
            }
            //输出数组元素
            for(int t = 0; t < intArr.length; t ++){
                System.out.print(intArr[t] + " ");
            }
        }
    }

    二维数组:

    1、数组可以看成是以数组为元素的数组    例:int a[][] = {{1,2},{3,4,5,6},{7,8,9}};

    2、java中多维数组的声明和初始化应按从高维到低维的顺序进行(从第一个中括号到第n个中括号)

    int a[][] = new int[3][];
    a[0] = new int[2];
    a[1] = new int[4];
    a[2] = new int[3];
    int t[][] = new int[][3];//非法

     静态初始化:

    int a[][] = {{1,2},{3,4},{5,6,7}};
    int a[3][2] = {{1,2},{3,4},{5,6}};//非法,静态初始化方括号不要加数字

    动态初始化:

    int a[][] = new int[3][5];
    int b[][] = new int[3][];
    b[0] = new int[2];
    b[1] = new int[3];
    b[2] = new int[5];

    数组拷贝:

    使用java.lang.System类的静态方法

    public static void arraycopy(Object src, int srcPos, Object dest,int destPos,int length)

    Object src 源数组
    int srcPos 源数组起始位置
    Object dest 目标数组
    int destPos 目标数组起始位置
    int length 拷贝的长度

    如果源数据数目超过目标数组边界会抛出IndexOutOfBoundsException异常

    //拷贝字符串到另一个数组,拷贝一个二维数组到另一个二维数组
    import java.lang.System.*;
    
    public class Test{
        public static void main(String[] args) {
            String[] arr1 = {"hello","this","is","my","dog"};
            String[] arr2 = new String[6];
            //数组拷贝
            System.arraycopy(arr1, 0, arr2, 0, arr1.length);
    
            for(int i = 0; i < arr2.length; i ++) {
                System.out.print(arr2[i] + " ");
            }
    
            System.out.println();
    
            int[][] i1= {{1,2},{1,2,3},{3,4}};
            int[][] i2= new int[3][]; 
            //数组拷贝
            System.arraycopy(i1, 0, i2, 0, i1.length);
            //输出i2的全部元素
            for(int i = 0; i < i2.length; i ++) {
                for(int j = 0; j < i2[i].length; j++) {
                    System.out.print(i2[i][j] + " ");
                }
            }
    
            System.out.println();
    
            int i3[][] = new int[3][];
            i3[1] = new int[2];
            //System.out.println(i3[0][]);
            System.out.println(i3[1]);
            System.out.println(i3[1][0]);
    
        }
    }

    package guolei;
    
    public class ArrTest {
        public static void main(String[] args) {
            String[][] str1 = new String[3][];
            str1[0] = new String[2];
            str1[1] = new String[3];
            str1[2] = new String[2];
            
            for(int i = 0; i < str1.length; i ++) {
                for(int j = 0; j < str1[i].length; j ++) {
                    //以下两种方法都可行,但是第二种为什么要new String?????????????/
                    //str1[i][j] = "数组的位置是:i = " + i + " j = " + j;
                    str1[i][j] = new String("数组的位置是:i = " + i + " j = " + j);
                }
            }
            
            for(int i = 0; i < str1.length; i ++) {
                for(int j = 0; j < str1[i].length; j ++) {
                    //输出状态:数组的位置是:i = 0 j = 0。。。。。。。
                    System.out.println(str1[i][j]);
                }
            }
        }
    }
  • 相关阅读:
    添加定界符: AnsiQuotedStr
    c++ builder 中的 XMLDocument 类详解(13) 遍历XML文件
    c++ builder 中的 XMLDocument 类详解(11) 读取和设置版本号
    c++ builder 中的 XMLDocument 类详解(9) 关于 HasChildNodes 与 IsTextElement
    VBA 宏 与 Word 编程
    Iframe 高度自适应!
    第一次加载控件的问题.
    Server.Transfer 页面传值.
    Ajax 动态加载 用户控件脚本报 "缺少对象" 的错误!
    GridView的 RowCreated 里不能写有关控件的客户端事件属性!!
  • 原文地址:https://www.cnblogs.com/wmjlh/p/7237090.html
Copyright © 2011-2022 走看看