001數組

 一、一維數組


1. 寫出一維數組的聲明與初始化
        

int[] ids ;
//1.靜態初始化:數組的初始化和數組元素的賦值操作同時進行
ids = new int[]{1,2,3,4,5} ;
//2.動態初始化:數組的初始化和數組元素的賦值操作分開進行
String[] strs = new String[5] ;

int[] arr4 = {1,2,3,4,5} ;//類型推斷



2.數組的調用

//數組的角標(或索引從0開始的,帶數組長度array.length-1結束)
names[0]= "Tom" ;
names[1]= "Jack" ;
names[2]= "Anna" ;//charAt(index)

3.如何獲得數組的長度?

array.lenth(length是數組中的一個屬性)

4.一維數組的遍歷

for(int j=0; j<array.length; j++){
    System.out.print(array[j] + ",") ;
}

5、一維數組元素的默認初始化值
    
    整型:0
    浮點型:0.0
    char:0或'/u0000',不是'0'
    boolean:false
    引用類型:null
    
6、一維數組內存解析

二、二維數組

1.二維數組的的聲明與初始化

//靜態初始化
int[][] arr1 = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
int[][] arr1 = {{1,2,3},{4,5,6},{7,8,9}};
//動態初始化1
int[][] arr2 = new int[3][2] ;
//動態初初始化2
int[][] arr2 = new int[3][] ;

2.二維數組的調用

int[][] arr2 = new int[3][4] ;

arr2[0][1] = 123 ;
arr2[1] = new int[4] ;

arr2[2]//打印會輸出地址值

3.獲得二維數組的長度?

int[][] arr2 = new int[3][4] ;

//外層長度:3
arr2.length
//內層長度:4
arr2[0].length

4.二維數組的遍歷

for(int i=0; i<arr.length; i++){
    for(int j=0; j<arr[i].length; j++){
        System.out.print(arr[i][j] + ",") ;
    }
     System.out.println() ;
}


三、算法

1. 楊輝三角


主要思路:把每行起始和結尾的1先賦值,之後第i行j列等於第i-1行j-1列加是第i-1行j列

public class Test01 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(true){
            System.out.println("請輸入要打印的楊輝三角行數:");
            //從鍵盤獲取要打印的楊輝三角行數
            String temp = sc.nextLine();
            try {
                //將鍵盤輸入字符串轉化爲int類型,如果格式不正確,則提示輸入格式不正確
                int rowsNum = Integer.parseInt(temp);
                getPascalTriangle(rowsNum);
            } catch (Exception e) {
                //e.printStackTrace();
                System.out.println("輸入的格式不正確,請輸入數字:");
            }
        }
    }
 
    //獲取楊輝三角的二維數組
    private static void getPascalTriangle(int rowsNum) {
        int n = rowsNum;
        //構建二維數組
        int[][] ss = new int[n][];
        //給每行第一個和最後一個賦值爲1
        for (int i = 0; i < ss.length; i++) {
            ss[i]=new int[i+1];
            ss[i][0]=1;
            ss[i][i]=1;
        }
        //給每行其他列賦值
        for (int i = 2; i < ss.length; i++) {
            for (int j = 1; j < ss[i].length-1; j++) {
                ss[i][j]=ss[i-1][j-1]+ss[i-1][j];
            }
        }
        //遍歷打印楊輝三角
        printArray(ss);
        
    }
 
    //遍歷方法
    private static void printArray(int[][] ss) {
        for (int i = 0; i < ss.length; i++) {
            for (int j = 0; j < ss[i].length; j++) {
                System.out.print(ss[i][j]+" ");
            }
            System.out.println();
        }
    }
}

源文鏈接:java實現楊輝三角

2. 回形數格式方陣的實現 


    主要思路:分別通過數組長度和數組是否賦值判斷是否轉向

public class HuiXing {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int vol = 15;//矩陣階數
        
        int[][] arr = new int[vol][vol];
        
        int x = 0;
        int y = 0;//初始座標
        int num = 1;
        
        while(arr[x][y] != (vol * vol)) {
            arr[x][y] = num;
            
            if(y != vol - 1 && arr[x][y + 1] == 0) {//→
                if(x > 0 && arr[x - 1][y]==0) {//優先向↑走
                    x--;
                }else {
                    y++;
                }
            }else if(x != vol - 1 && arr[x + 1][y] == 0) {//↓
                x++;
            }else if(y != 0 && arr[x][y - 1] == 0) {//←
                y--;
            }else if(arr[x - 1][y] == 0){//↑
                x--;
            }
            
            num++;
        }
        
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j] + "\t");
            }
            System.out.println();
        }
    }
}

原文鏈接:Java回形數問題
 

3. 求數值型數組中元素最大值、最小值、平均值、總和等

要求:定義一個int型數組的一維數組,包含10個元素,分別賦一些隨機整數,然後求出所有元素的最大值,最小值,總和,平均值,並輸出來。所有的隨機數數都是兩位

tip:[a,b]公式:(int)(Math.random() * (b-a+1) + a)

public class Arraytest1 {
    public static void main(String[] args) {
        int[] arr = new int[10] ;
        
        for (int i = 0; i < arr.length; i++) {
            arr[i] = (int)(Math.random() * (99-10+1) + 10) ;
        }
        
        //遍歷
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i] + "\t");
        }
        System.out.println();
        
        //求數組元素的最大值
        int maxValue = arr[0] ;
        for (int i = 0; i < arr.length; i++) {
            if (maxValue < arr[i]) {
                maxValue = arr[i] ;
            }
        }
        System.out.println("最大值爲:" + maxValue);
        //求數組元素的最大值
        int minValue = arr[0] ;
        for (int i = 0; i < arr.length; i++) {
            if (minValue > arr[i]) {
                minValue = arr[i] ;
            }
        }
        System.out.println("最小值爲:" + minValue);
        //求數組的總和
        int sumValue = 0 ;
        for (int i = 0; i < arr.length; i++) {
            sumValue += arr[i] ;
        }
        System.out.println("總和爲:" + sumValue);
        //求數組的平均值
        int avgValue = sumValue / arr.length ;
        System.out.println("平均值爲:" + avgValue);
    }
}

4. 數組複製

使用簡單的數組  
(1)創建一個類,在mina()方法array1和arrays2兩個變量,他們是int[]類型的數組  
(2)使用大括號{},把array1初始化爲8個素數:2,3,5,7,11,13,17,19  
(3)顯示array1的內容  
(4)賦值array2變等於array1,修改array2中的偶索引元素,使其等於索引值(如array[0]=0),打印array1  

public class ArrayTest2 {
    public static void main(String[] args) {
        int[] array1, array2 ;
        
        array1 = new int[]{2,3,5,7,11,13,17,19} ;
        
        //顯示array1的內容
        for(int i=0; i<array1.length; i++) {
            System.out.print(array1[i] + "\t");
        }
        System.out.println();
        
        //賦值array2變等於array1
        //不能稱作數組的複製
        array2 = array1 ;
        
        //修改array2中的偶索引元素,使其等於索引值(如array[0]=0)
        for(int i=0; i<array2.length; i++) {
            if(i%2 == 0) {
                array2[i] = i ;
            }
        }
        //顯示array1的內容
        for(int i=0; i<array1.length; i++) {
            System.out.print(array1[i] + "\t");
        }
        System.out.println();
    }
}

思考:array1與array2是什麼關係  

array1與array2地址值相同,都指向了對空間的位置的一個數組實體

拓展:修改題目,實現array2對array1的複製
 

array2 = new int[array1.length] ;
for(int i=0; i<array2.length; i++) {
    array2[i] = array1[i] ;
}

5. 數組的複製、反轉、查找(線性查找、二分法查找)

public class ArrayTest3 {
    public static void main(String[] args) {
        String[] str = new String[] {"AA", "BB", "CC", "DD", "EE", "FF"} ;
        
        //數組的複製
        String[] str1 = new String[str.length] ;
        for(int i=0; i<str1.length; i++) {
            str1[i] = str[i] ;
        }
        //數組的反轉
        //方法一
        for(int i=0; i<str.length/2; i++) {
            String temp = str[i] ;
            str[i] = str[str.length-1 -i] ;
            str[str.length-i] = temp ;
        }
        //方法二
        for(int i=0, j=str.length-1; i<j; i++,j--) {
            String temp = str[i] ;
            str[i] = str[j] ;
            str[j] = temp ;
        }
        
        //查找
        //線性查找:
        String target = "EE" ;
        int index = -1 ;
        for(int i=0; i<str.length; i++) {
            if(target.equals(str[i])) {
                index = i ;
                System.out.println("找到指定元素,位置爲" + i);
                break ;
            }
        }
        if(index == -1) {
            System.out.println("遺憾,沒有找到");
        }
        
        //二分法查找
        //前提:所要查找的數組必須有序
        int[] array1 = new int[] {1,2,14,15,77} ;
        int t = 77 ;
        int head = 0 ;
        int end = str.length-1 ;
        boolean isFlag = true ;
        while (head <= end) {
            int middle = (head + end) / 2 ;
            
            if(array1[middle] == t) {
                isFlag = false ;
                System.out.println("找到指定元素,位置爲" + middle);
                break ;
            } else if(array1[middle] > t) {
                end = middle-1 ;
            } else if(array1[middle] < t) {
                head = middle+1 ;
            }
        }
        if(isFlag) {
            System.out.println("遺憾,沒有找到");
        }
        
    }
}


4. Arrays常用方法

序號 方法 描述
1 boolean equals(int[] a, int[] b) 判斷兩數組是否相等
2 String toString(int[] a) 輸出數組信息
3 void fill(int[] a, int val) 將指定值填充到數組之中
4 void sort(int[] a) 將數組進行排序
5 int binarySearch(int[] a, int key) 對排序後的數組進行二分法檢索指定的值

5.數組常見異常

(1)數組角標越界的異常:ArrayIndexOutException
(2)空指針異常:NullPiontException


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章