数组一

来源:互联网 发布:500万双色球过滤软件 编辑:程序博客网 时间:2024/05/23 12:57

一维数组

一维数组的声明

 一维数组的声明方式:

type var[]; 或type[] var;
   例如:
   int a1[]; int[] a2;
   double b[];
   Person[] p1; String s1[];
   java语言中声明数组时不能指定其长度(数组中元素的个数),例如:
   int a[5] ;                     //非法(C中可以)
 
 
  除了基础的数据类型以外,java中所以的类型都是引用类型。
  java中数组是存放在堆中的。

数组对象的创建

  java 中使用关键字new创建数组对象,格式为:
    数组名=new 数组元素的类型 [数组元素的个数]
   
    如
    int []s;
    s=new int[5];

数组初始化

动态初始化

数组定义与为数组分配空间和赋值的操作分开进行,如

    public class Test{       public static void main(String[] args){          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,4,2004);          days[1]=new Date(2,4,2004);          days[2]=new Date(3,4,2004);                 }     }    class Date{        int year,month,day;        Date(int y,int m,int d){           year=y;month=m;day=d;        }     }


 

 

静态初始化

在定义数组的同时就为数组元素分配空间并赋值,例如:

     public class Test{       public static void main(String[] args){          int a[]={1,2,3};          Date days[]={                new Date(1,4,2004);                new Date(2,4,2004);                new Date(3,4,2004);          };                }     }               class Date{        int year,month,day;        Date(int y,int m,int d){           year=y;month=m;day=d;        }     }


数组元素的默认初始化

数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被隐式初始化,如:

    public class Test{       public static void main(String[] args){          int a[]=new int[3];                                Date days[]=new Date[3];                    System.out.println(a[3]);          System.out.println(days[2]);                 }     }    class Date{        int year,month,day;        Date(int y,int m,int d){           year=y;month=m;day=d;        }     }          输出结果:0             null

数组元素的引用

 定义并用运算符new为之分配空间后,才可以引用数组中的每个元素,数组元素的引用方式为arrayName[index]
      a.length   //不是a.length()!
      查看本地主机ip信息的命令行参数
      ipconfig
      ipconfig -all

String[] args 的情况

public class TestArgs1{public static void main(String[] args){for(int i=0;i<args.length;i++){System.out.println(args[i]);}}}javac TestArray1.javajava TestArray1 asd 123 yre ouus输出:asd     123     yre     ouus


 

 

public class TestArgs2{public static void main(String[] args){if(args.length<3){System.out.println("出错啦!");System.exit(-1);}double d1=Double.parseDouble(args[0]);  //将字符串转换成double类型double d2=Double.parseDouble(args[2]);double d=0;if(args[1].equals("+")) d=d1+d2;else if(args[1].equals("-"))d=d1-d2;else if(args[1].equals("x"))d=d1*d2;      //注意此处的  x  和   *else if(args[1].equals("/"))d=d1/d2;else{System.out.println("Error operator!");System.exit(-1);}System.out.println(d);}}


二维数组

二维数组的声明

二维数组可以看成以数组为元素的数组。例如:
        int a[][]={{1,2},{3,4,5,6},{7,8,9}};
        java中多维数组的声明和初始化应按从高维到低维的顺序进行,例如:
         int a[][]=new int [3][];
         a[0]=new int [2];
         a[1]=new int [4];
         a[2]=new int [3];
         int t1[][]=new int [][4];   //非法

二维数组初始化

静态初始化: 

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


        int B[3][2]={{1,2},{2,3},{3,4,5}};        //非法

动态初始化:

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];

 

public class Test{public static void main(String[] args){int a[][]={{1,2},{3,4,5,6},{7,8,9}};for(int i=0;i<a.length;i++){for(int j=0;j<a[i].length;j++){System.out.print("a["+i+"]["+j+"]="+a[i][j]+"  ");}System.out.println();}}}

数组的拷贝

使用java.lang.System类的静态 public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
         
          如果源数据数目超过目标数组边界会抛出异常IndexOutOfBoundsException

 

public class TestArrayCopy{public static void main(String[] args){String[] s={"Mcrosoft","IBM","Sun","Oracle","Apple"};String[] sBak=new String[6];System.arraycopy(s,0,sBak,0,s.length);for(int i=0;i<sBak.length;i++){System.out.println(sBak[i]+" ");}System.out.println();int[][] intArray={{1,2},{1,2,3},{3,4}};int[][] intArrayBak=new int[3][];System.arraycopy(intArray,0,intArrayBak,0,intArray.length);intArrayBak[2][1]=100;for(int i=0;i<intArray.length;i++){for(int j=0;j<intArray[i].length;j++){System.out.print(intArray[i][j]+"  ");}System.out.println();}}}


 

 

原创粉丝点击