1、写出一维数组初始化的两种方式
int[] arr = new int[5]; //动态初始化int[] arr = new int[]{1,2,3,4};//静态初始化
2、写出二维数组初始化的两种方式
int[][] arr = new int[5][4];
int[][] arr1 = new int[5][];//动态初始化int[][] arr3 = new int[][]{{1,2,3},{1,2},{1}};//静态初始化
3、如何遍历如下的二维数组
int[] arr = new int[][]{{1,2,3},{4,5},{6,7,8}};代码实现:
public class Traverse{ public static void main(String[] args) { int[] arr = new int[][]{{1,2,3},{4,5},{6,7,8}}; 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(); } } }
4、不同类型的一维数组元素的默认初始化值各是多少
byte\short\int\long --> 0
float\double --> 0.0
char --> 0
boolean --> false
String --> null
5、一维数组的内存解析
String[] strs = new String[5];
strs[2] = “Tom”;
strs = new String[3];
6、使用冒泡排序,实现如下的数组从小到大排序。
int[] arr = new int[]{34,5,22,-98,6,-76,0,-3};代码实现:
public class BubbleSort { public static void main(String[] args) { int[] arr = new int[]{34,5,22,-98,6,-76,0,-3}; //冒泡排序 for(int i = 0; i < arr.length ; 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]+","); } } }
7、如何反转下面的数组。
int[] arr = new int[]{34,5,22,-98,6,-76,0,-3};
代码实现:
public class rever { public static void main(String[] args) { int[] arr = new int[]{34,5,22,-98,6,-76,0,-3}; //反转前 for(int i = 0; i < arr.length ; i++){ System.out.print(arr[i]+","); } System.out.println(); int left = 0; int right = arr.length-1; while(left < right){ int temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; left ++; right --; } //反转后 for(int i = 0; i < arr.length ; i++){ System.out.print(arr[i]+","); } } }
8、复制下面数组,得到一个新的数组
int[] arr = new int[]{34,5,22,-98,6,-76,0,-3};
代码实现:
public class CopyArrays { public static void main(String[] args) { int[] arr = new int[]{34,5,22,-98,6,-76,0,-3}; System.out.println("arr:"); //遍历原数组 for(int i = 0; i < arr.length ; i++){ System.out.print(arr[i]+" "); } //创建一个新数组 int[] arr1 = new int[arr.length]; System.out.println(); //复制 for(int i = 0; i < arr.length ; i++){ arr1[i] = arr[i]; } System.out.println("arr1:"); //遍历新数组 for(int i = 0; i < arr1.length ; i++){ System.out.print(arr1[i]+" "); } } }
9、使用线性查找,从下面数组中查找22是否存在。存在,返回所在位置的索引。不存在,输出提示信息。
int[] arr = new int[]{34,5,22,-98,6,-76,0,-3};
代码实现:
public class SearchArray { public static void main(String[] args) { int[] arr = new int[]{34,5,22,-98,6,-76,0,-3}; System.out.println("请输入要查找的数:"); Scanner scan = new Scanner(System.in); int equals = scan.nextInt(); for(int i = 0; i < arr.length ; i++){ if(equals == arr[i]){ System.out.println("已找到"+arr[i]+"这个元素"); break; }else if(i == arr.length -1 ){ System.out.println("未找到这个元素!"); } } } }
10、定义一个有序数组使用二分查找,查找从控制台输入的数,查找成功后返回索引。不存在,输出提示信息。
int[] arr = new int[]{0,5,15,34,65,84,97,125,356,365};
代码实现:
import java.util.Scanner; public class BinarySearch { public static void main(String[] args) { int[] arr = new int[]{0,5,15,34,65,84,97,125,356,365}; System.out.println("请输入要查找的数:"); Scanner scan = new Scanner(System.in); int equals = scan.nextInt(); int left = 0; int right = arr.length - 1; boolean flag = true; while(left <= right){ int middle = (left+right)/2; if(equals == arr[middle]){ System.out.println("已找到,索引为:"+middle); flag = false; break; }else if(equals > arr[middle]){ left = middle + 1; }else{ right = middle - 1; } } if(flag){ System.out.println("未找到这个数!"); } } }
11、数组中常见的异常有哪些?请举例说明
①数组下标越界异常:ArrayIndexOutOfException
int[] array = new int[5];
int i = array[5] //下标越界
②空指针异常:NoPointException
情况一:
int[][] arrays = new int[4][];
int i = arrays[0][0] //空指针异常
情况二:
int[] array = new int[5];
array = null;
System.out.println(array[0]); //空指针异常
情况3:主要出现下对象调功能中
String[] arr3 = new String[4];
System.out.println(arr3[0].toString());
今天分享的关于复制、查找(线性查找、二分法查找(有序数组))、反转。
排序的话就分享了一个最简单的冒泡排序,关于其他的会在下次分享(原理、代码实现)、各种排序方法之间的比较(时间复杂度、稳定性等等),会一直写下去的。支持我吧。