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()); } }