Java数组练习二(反转、复制、查找)

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];

Java数组练习二(反转、复制、查找)_第1张图片

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

今天分享的关于复制、查找(线性查找、二分法查找(有序数组))、反转。

排序的话就分享了一个最简单的冒泡排序,关于其他的会在下次分享(原理、代码实现)、各种排序方法之间的比较(时间复杂度、稳定性等等),会一直写下去的。支持我吧。

你可能感兴趣的:(数组,算法)