J2SE之_数组

数组概述

一维数组的声明

数组对象的创建

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

 数组初始化(1)

 数组初始化(2)

 数组元素的默认初始化

 数组元素的引用

public class TestArgs {
    public static void main(String[] args) {
        /*
        for(int i=0; i<args.length; i++) {
            System.out.println(args[i]);
        }
        
        System.out.println( 
              "Usage: java Test \"n1\" \"op\" \"n2\"");
              */
    if(args.length<3){
            System.out.println( 
              "Usage: java Test \"n1\" \"op\" \"n2\"");
            System.exit(-1);
    } 
    double d1 = Double.parseDouble(args[0]);
    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;
    else if(args[1].equals("/")) d = d1/d2;
    else{
        System.out.println("Error operator!"); 
        System.exit(-1);
    }   
    System.out.println(d);
    }
}
TestArgs.java
public class TestArray
{
    public static void main(String[] args){
        int[] a = new int[args.length];
        for(int i=0; i<args.length; i++){
            a[i] = Integer.parseInt(args[i]);
        }
        System.out.print("未排序前:");
        print(a);
        System.out.print("\n排序后为:");
        //bubble_sort(a);
        selectionSort(a);
        print(a);
    }

    //选择排序
    private static void selectionSort(int[] a){
        for(int i=0;i<a.length;i++){
            for(int j=i+1; j<a.length;j++){
                if(a[i]>a[j]){
                    int temp=0;
                    temp=a[i];
                    a[i]=a[j];
                    a[j]=temp;
                }
            }
        }
    }

    //选择排序改进
    private static void selectionSort(int[] a){
        int k, temp;
        for(int i=0;i<a.length;i++){
            k = i;
            for(int j=k+1; j<a.length;j++){
                if(a[j]>a[k]){
                    k = j;
                }
            }
            if(k != i){
                temp = a[i];
                a[i] = a[k];
                a[k] = temp;
            }
        }
    }


    //冒泡排序
    private static void bubble_sort(int[] a){
        for(int i=0;i<a.length-1;i++){
            for(int j=0; j<a.length-i-1;j++){
                if(a[j] > a[j+1]){
                    int temp = 0;
                    temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }
            }
        }
    }
    //打印一维数组
    private static void print(int[] a){
        for(int i=0; i<a.length;i++){
            System.out.print(a[i]+" ");
        }
    }
}
Sort.java

 课堂练习

public class TestDateSort {
    public static void main(String[] args) {
        Date[] days = new Date[5];
        days[0] = new Date(2006, 5, 4);
        days[1] = new Date(2006, 7, 4);
        days[2] = new Date(2008, 5, 4);
        days[3] = new Date(2004, 5, 9);
        days[4] = new Date(2004, 5, 4);
        
        Date d = new Date(2006, 7, 4);
        String str = String.valueOf(d);
        //str = d.toString();
        bubbleSort(days);
        
        for(int i=0; i<days.length; i++) {
            System.out.println(days[i]);
        }
        
        System.out.println(binarySearch(days, d));
    }
    
     public static Date[] bubbleSort(Date[] a){
        int len = a.length;
        for(int i = len-1;i>=1;i--){
            for(int j = 0;j<=i-1;j++){
                if(a[j].compare(a[j+1]) > 0){
                    Date temp = a[j]; 
                    a[j]=a[j+1];
                    a[j+1]=temp;
                }
            }
        }
        return a;
    }
    
    public static int binarySearch(Date[] days, Date d) {
        if (days.length==0) return -1;
    
        int startPos = 0; 
        int endPos = days.length-1;
        int m = (startPos + endPos) / 2;
        while(startPos <= endPos){
          if(d.compare(days[m]) == 0) return m;
          if(d.compare(days[m]) > 0) {
              startPos = m + 1;
          }
          if(d.compare(days[m]) < 0) {
              endPos = m -1;
          }
          m = (startPos + endPos) / 2;
        }
        return -1;
    }
}

class Date {
  int year, month, day;
  
  Date(int y, int m, int d) {
    year = y; month = m; day = d;
  }
  
  public int compare(Date date) {
    return year > date.year ? 1
           : year < date.year ? -1
           : month > date.month ? 1
           : month < date.month ? -1
           : day > date.day ? 1
           : day < date.day ? -1 : 0;
  }
  
  public String toString() {
      return "Year:Month:Day -- " + year + "-" + month + "-" + day;
  }
}
TestDateSort.java

加3退1

public class Count3Quit
{
    public static void main(String[] args){
        boolean[] arr= new boolean[500];
        for(int i=0;i<arr.length;i++){
            arr[i]=true;
        }

        int leftCount = arr.length;    //还剩下多少人
        int countNum = 0; //计数器
        int   index = 0;  //第几个人
        
        while(leftCount > 1){
            if(arr[index] == true){
                countNum ++;
                if(countNum == 3){
                countNum = 0;
                arr[index] = false;
                leftCount --;
                }
            }
            index ++;
            if(index == arr.length){
                index = 0;    //数到499从头开始继续数
            }
        }

        for(int i=0;i<arr.length;i++){
            if(arr[i] == true){
                System.out.println(i);
            }
        }
    }
}
Count3Quit1.java

面向对象写法

public class Count3Quit2
{
    public static void main(String[] args){
        KidCircle kc = new KidCircle(500);
        int countNum = 0;    //计数器
        Kid k = kc.first;
        while(kc.count > 1){
            countNum++;
            if(countNum == 3){
                countNum = 0;
                kc.delete(k);
            }
            k = k.right;
        }
        
        System.out.println(kc.first.id);
    }
}

class Kid
{
    int id;
    Kid left;
    Kid right;
}

class KidCircle
{
    int count = 0;
    Kid first, last;

    KidCircle(int n){
        for(int i=0; i<n; i++){
            add();
        }
    }

    void add(){
        Kid k = new Kid();
        k.id = count;
        if(count <= 0){
            first = k;
            last = k;
            k.left = k;
            k.right = k;
        }else{
            last.right = k;
            k.left = last;
            k.right = first;
            first.left = k;
            last = k;
        }
        count ++;
    }

    void delete(Kid k){
        if(count <= 0){
            return;
        }else if(count == 1){
            first = last = null;
        }else{
            k.left.right = k.right;
            k.right.left = k.left;

            if(k == first){
                first = k.right;
            }else if(k == last){
                last = k.left;
            }
        }
        count --;
    }
}
Count3Quit2.java

二分查找

public class TestSearch {
    public static void main(String[] args) {
        int a[] = { 1, 3, 6, 8, 9, 10, 12, 18, 20, 34 };
        int i = 12;
        //System.out.println(search(a, i));
        System.out.println(binarySearch(a, i));
    }
    
    public static int search(int[] a, int num) {
        for(int i=0; i<a.length; i++) {
            if(a[i] == num) return i;
        }
        return -1;
    }
    
    public static int binarySearch(int[]a, int num) {
    if (a.length==0) return -1;
    
    int startPos = 0; 
    int endPos = a.length-1;
    int m = (startPos + endPos) / 2;
    while(startPos <= endPos){
      if(num == a[m]) return m;
      if(num > a[m]) {
          startPos = m + 1;
      }
      if(num < a[m]) {
          endPos = m -1;
      }
      m = (startPos + endPos) / 2;
    }
    return -1;
  }

}
TestSearch.java

二维数组

数组的拷贝

public class TestArrayCopy {
  public static void main(String args[]) {
    String[] s = 
            {"Mircosoft","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.print(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();
    }
  }
}
TestArrayCopy.java

 

posted on 2015-09-02 00:21  gimin  阅读(202)  评论(0)    收藏  举报