Java-筆記7

public class ArrayExer1 { public static void main(String[] args) { int[][] arr = new int[][]{{3,5,8},{12,9},{7,0,6,4}}; int sum = 0;//記錄總和
        for(int i = 0;i < arr.length;i++){ for(int j = 0;j < arr[i].length;j++){ sum += arr[i][j]; } } System.out.println("總和爲:" + sum); } }

 

 

/* * 使用二維數組打印一個 10 行楊輝三角。 【提示】 1. 第一行有 1 個元素, 第 n 行有 n 個元素 2. 每一行的第一個元素和最後一個元素都是 1 3. 從第三行開始, 對於非第一個元素和最後一個元素的元素。即: yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j]; * */
public class YangHuiTest { public static void main(String[] args) { //1.聲明並初始化二維數組
        int[][] yangHui = new int[10][]; //2.給數組的元素賦值
        for(int i = 0;i < yangHui.length;i++){ yangHui[i] = new int[i + 1]; //2.1 給首末元素賦值
            yangHui[i][0] = yangHui[i][i] = 1; //2.2 給每行的非首末元素賦值 //if(i > 1){
            for(int j = 1;j < yangHui[i].length - 1;j++){ yangHui[i][j] = yangHui[i-1][j-1] + yangHui[i-1][j]; } //}
 } //3.遍歷二維數組
        for(int i = 0;i < yangHui.length;i++){ for(int j = 0;j < yangHui[i].length;j++){ System.out.print(yangHui[i][j] + "  "); } System.out.println(); } } }

 

 

 

/* * 算法的考查:求數值型數組中元素的最大值、最小值、平均數、總和等 * * 定義一個int型的一維數組,包含10個元素,分別賦一些隨機整數, * 而後求出全部元素的最大值,最小值,和值,平均值,並輸出出來。 * 要求:全部隨機數都是兩位數。 * * [10,99] * 公式:(int)(Math.random() * (99 - 10 + 1) + 10) * */
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.print(arr[i] + "\t"); } System.out.println(); //求數組元素的最大值
        int maxValue = arr[0]; for(int i = 1;i < arr.length;i++){ if(maxValue < arr[i]){ maxValue = arr[i]; } } System.out.println("最大值爲:" + maxValue); //求數組元素的最小值
        int minValue = arr[0]; for(int i = 1;i < arr.length;i++){ if(minValue > arr[i]){ minValue = arr[i]; } } System.out.println("最小值爲:" + minValue); //求數組元素的總和
        int sum = 0; for(int i = 0;i < arr.length;i++){ sum += arr[i]; } System.out.println("總和爲:" + sum); //求數組元素的平均數
        int avgValue = sum / arr.length; System.out.println("平均數爲:" + avgValue); } }

 

 

/* * 使用簡單數組 (1)建立一個名爲ArrayExer2的類,在main()方法中聲明array1和array2兩個變量,他們是int[]類型的數組。 (2)使用大括號{},把array1初始化爲8個素數:2,3,5,7,11,13,17,19。 (3)顯示array1的內容。 (4)賦值array2變量等於array1,修改array2中的偶索引元素,使其等於索引值(如array[0]=0,array[2]=2)。打印出array1。 * * 思考:array1和array2是什麼關係?array1和array2地址值相同,都指向了堆空間的惟一的一個數組實體。 * 拓展:修改題目,實現array2對array1數組的複製 */
public class ArrayExer2 { public static void main(String[] args) {  //alt + /
        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"); } //賦值array2變量等於array1 //不能稱做數組的複製。
        array2 = array1; //修改array2中的偶索引元素,使其等於索引值(如array[0]=0,array[2]=2)
        for(int i = 0;i < array2.length;i++){ if(i % 2 == 0){ array2[i] = i; } } System.out.println(); //打印出array1
        for(int i = 0;i < array1.length;i++){ System.out.print(array1[i] + "\t"); } } }

 

/* * 算法的考查:數組的複製、反轉、查找(線性查找、二分法查找) * * */
public class ArrayTest2 { public static void main(String[] args) { String[] arr = new String[]{"JJ","DD","MM","BB","GG","AA"}; //數組的複製(區別於數組變量的賦值:arr1 = arr)
        String[] arr1 = new String[arr.length]; for(int i = 0;i < arr1.length;i++){ arr1[i] = arr[i]; } //數組的反轉 //方法一: // for(int i = 0;i < arr.length / 2;i++){ // String temp = arr[i]; // arr[i] = arr[arr.length - i -1]; // arr[arr.length - i -1] = temp; // } //方法二: // for(int i = 0,j = arr.length - 1;i < j;i++,j--){ // String temp = arr[i]; // arr[i] = arr[j]; // arr[j] = temp; // } //遍歷
        for(int i = 0;i < arr.length;i++){ System.out.print(arr[i] + "\t"); } System.out.println(); //查找(或搜索) //線性查找:
        String dest = "BB"; dest = "CC"; boolean isFlag = true; for(int i = 0;i < arr.length;i++){ if(dest.equals(arr[i])){ System.out.println("找到了指定的元素,位置爲:" + i); isFlag = false; break; } } if(isFlag){ System.out.println("很遺憾,沒有找到的啦!"); } //二分法查找:(熟悉) //前提:所要查找的數組必須有序。
        int[] arr2 = new int[]{-98,-34,2,34,54,66,79,105,210,333}; int dest1 = -34; dest1 = 35; int head = 0;//初始的首索引
        int end = arr2.length - 1;//初始的末索引
        boolean isFlag1 = true; while(head <= end){ int middle = (head + end)/2; if(dest1 == arr2[middle]){ System.out.println("找到了指定的元素,位置爲:" + middle); isFlag1 = false; break; }else if(arr2[middle] > dest1){ end = middle - 1; }else{//arr2[middle] < dest1
                head = middle + 1; } } if(isFlag1){ System.out.println("很遺憾,沒有找到的啦!"); } } }

 

 

 

 

 

 

 

/* * 數組的冒泡排序的實現 * */
public class BubbleSortTest { public static void main(String[] args) { int[] arr = new int[]{43,32,76,-98,0,64,33,-21,32,99}; //冒泡排序
        for(int i = 0;i < arr.length - 1;i++){ for(int j = 0;j < arr.length - 1 - i;j++){ if(arr[j] > arr[j + 1]){ int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } for(int i = 0;i < arr.length;i++){ System.out.print(arr[i] + "\t"); } } }

 

 

/** * 快速排序 * 經過一趟排序將待排序記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另外一部分關鍵字小, * 則分別對這兩部分繼續進行排序,直到整個序列有序。 * @author shkstart * 2018-12-17 */
public class QuickSort { private static void swap(int[] data, int i, int j) { int temp = data[i]; data[i] = data[j]; data[j] = temp; } private static void subSort(int[] data, int start, int end) { if (start < end) { int base = data[start]; int low = start; int high = end + 1; while (true) { while (low < end && data[++low] - base <= 0) ; while (high > start && data[--high] - base >= 0) ; if (low < high) { swap(data, low, high); } else { break; } } swap(data, start, high); subSort(data, start, high - 1);//遞歸調用
            subSort(data, high + 1, end); } } public static void quickSort(int[] data){ subSort(data,0,data.length-1); } public static void main(String[] args) { int[] data = { 9, -16, 30, 23, -30, -49, 25, 21, 30 }; System.out.println("排序以前:\n" + java.util.Arrays.toString(data)); quickSort(data); System.out.println("排序以後:\n" + java.util.Arrays.toString(data)); } }

 

 

 

 

 

package com.atguigu.java; import java.util.Arrays; /* * java.util.Arrays:操做數組的工具類,裏面定義了不少操做數組的方法 * * */
public class ArraysTest { public static void main(String[] args) { //1.boolean equals(int[] a,int[] b):判斷兩個數組是否相等。
        int[] arr1 = new int[]{1,2,3,4}; int[] arr2 = new int[]{1,3,2,4}; boolean isEquals = Arrays.equals(arr1, arr2); System.out.println(isEquals); //2.String toString(int[] a):輸出數組信息。
 System.out.println(Arrays.toString(arr1)); //3.void fill(int[] a,int val):將指定值填充到數組之中。
        Arrays.fill(arr1,10); System.out.println(Arrays.toString(arr1)); //4.void sort(int[] a):對數組進行排序。
 Arrays.sort(arr2); System.out.println(Arrays.toString(arr2)); //5.int binarySearch(int[] a,int key)
        int[] arr3 = new int[]{-98,-34,2,34,54,66,79,105,210,333}; int index = Arrays.binarySearch(arr3, 210); if(index >= 0){ System.out.println(index); }else{ System.out.println("未找到"); } } }

 

 

 

package com.atguigu.java; /* * 數組中的常見異常: * 1. 數組角標越界的異常:ArrayIndexOutOfBoundsExcetion * * 2. 空指針異常:NullPointerException * */
public class ArrayExceptionTest { public static void main(String[] args) { //1. 數組角標越界的異常:ArrayIndexOutOfBoundsExcetion
        int[] arr = new int[]{1,2,3,4,5}; // for(int i = 0;i <= arr.length;i++){ // System.out.println(arr[i]); // } // System.out.println(arr[-2]); // System.out.println("hello"); //2.2. 空指針異常:NullPointerException //狀況一: // int[] arr1 = new int[]{1,2,3}; // arr1 = null; // System.out.println(arr1[0]); //狀況二: // int[][] arr2 = new int[4][]; // System.out.println(arr2[0][0]); //狀況三:
        String[] arr3 = new String[]{"AA","BB","CC"}; arr3[0] = null; System.out.println(arr3[0].toString()); } }
相關文章
相關標籤/搜索