【黑马程序员】-Java基础语法(数组) 第四天

-------  android培训java培训java学习型技术博客、期待与您交流! ----------

知识点

数组定义:数组是用来存储数据的集合,但是,通常我们会发现把数组看做一个存储具有相同类型的变量集合会更有用。
数组声明:使用(元素类型[] 数组引用变量)或(元素类型 数组引用变量[])声明一个数组类型的变量。
不同于基本数据类型变量的声明,声明数组变量并不会给数组分配任何空间。数组变量不是基本数据类型变量。数组变量包含的是对数组的引用
数组创建:(new 数据类型[数组大小])。注意:只有创建数组后才能给数组元素赋值
数组中的每个元素都是使用语法(数组引用变量[下标])表示的。下标必须是一个整数或一个整数表达式。
创建数组后,它的大小就不能改变,使用(数组引用变量.length)可以得到数组的大小。由于数组的下标总是从0开始,所以,最后一个下标总是(数组引用变量.length -1)。如果试图引用数组界外的元素,就会发生(下标越界)异常。
数组初始化语法(简洁表达式):(元素类型[] 数组引用变量 = {元素1, 元素2, ... ,元素})。它将数组的声明、创建和初始化合并为一条语句。
数组参数传递:当数组参数传递给方法时,实际上传递的是数组的引用;更准确地说,被调用的方法可以修改调用者的原始数组的元素。



01)静态初始化--常见问题。

class Arr{
public static void main(String[] args){
int[] arr = new int[3];//创建一个数组,里面含有3个int类型的值。
System.out.println(int[3]);//运行结果提示:ArrayIndexOutOfBoundsException。操作数组时,访问到了数组中不存在的下标。
arr = null;//使arr等于空,不在指向数组。
System.out.println(int[0]);//NullPointerException。下标越界异常。
}
}

02)数组的操作--(循环)

常见之一:获取数组中的数据。通常用到for循环。
public class TArr {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8};
printArray(arr);
}

//定义功能,用来打印数组中的元素,并且用“,”隔开,最后一个元素不带逗号。
public static void printArray(int[] arr){
for (int i = 0; i < arr.length; i++){
if (i != arr.length -1)//判断是否为最后一个元素
System.out.print(arr[i] + ", ");
else
System.out.println(arr[i]);
}
}
}
打印结果为下图所示:


03)获取最大值、最小值


代码:
public class MaxArray {
public static void main(String[] args) {
int[] arr = {-1, -31213, -432, 4, 6, 7, 3};
int max = getMax(arr);
System.out.println("Max is " + max);
int min = getMin(arr);
System.out.println("Max is " + min);
}
//获取最大值。
public static int getMax(int[] arr){
int max = arr[0];
for (int i = 0; i < arr.length; i++){
if (arr[i] > max)
max = arr[i];
}
return max;//返回最大值。
}
//获取最小值。
public static int getMin(int[] arr){
int min = arr[0];
for (int i = 0; i < arr.length; i++){
if (arr[i] < min)
min = arr[i];
}
return min;//返回最小值。
}
}
运行结果如下图所示:


04)排序--选择排序



public class ArrayTest {
	public static void main(String[] args) {
		int[] arr = {-1, -31213, -432, 4, 6, 7, 3};
		printArray(arr);//排序前。
		selectSort(arr);//排序
		printArray(arr);//排序后。
	}
	
	public static void selectSort(int[] arr){//排序
		for (int i = 0; i < arr.length -1; i++){
			for (int j = i + 1; j <arr.length; j++){
				if (arr[i] > arr[j]){
					int temp = arr[i];
					arr[i] = arr[j];
					arr[j] = temp;
				}
			}
		}
	}
	
	public static void printArray(int[] arr){//打印
		System.out.print("[");
		for (int i = 0; i < arr.length; i++){
			if (i != arr.length -1)//判断是否为最后一个元素
				System.out.print(arr[i] + ", ");
			else
				System.out.println(arr[i] + "]");
		}
	}
}

运行结果如下图所示:


5)排序-冒泡排序


	public static void bubbleSort(int[] arr){//冒泡排序
		for (int i = 0; i < arr.length -1; i++){
			for (int j = 0; j < arr.length - i -1; j++){
				if (arr[j] > arr[j + 1]){
					int temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
				}
			}
		}
	}

运行结果如下图所示:


06)排序--位置置换功能抽取


	public static void swp(int[] arr, int a, int b){
		int temp = arr[a];
		arr[a] = arr[b];
		arr[b] = temp;
	}

07)折半查找


public class ArrayTest1 {
	public static void main(String[] args) {
//		int[] arr = {3, 1, 5, 4, 33, 6, 7, 9};
//		int index = getIndex(arr, 3);
		int[] arr = {2, 3, 5, 6, 8, 9, 324, 545};
		int index_1 = halfSearch_2(arr, 8);
		System.out.println("Index_1 is " + index_1);
		int index_2 = halfSearch_2(arr, 9999999);
		System.out.println("Index_2 is " + index_2);
		int index_3 = halfSearch_2(arr, 3);
		System.out.println("Index_3 is " + index_3);
	}
	
	/*
	 * 折半查找可以提供效率,
	 */
	public static int halfSearch(int[] arr, int key){
		int min = 0, max = arr.length - 1, mid = (min + max) / 2;
		while (arr[mid] != key){
			if (key > arr[mid])
				min = mid + 1;
			else if (key < arr[mid])
				max = mid - 1;
			if (min > mid)
				return -1;
			mid = (min + max) / 2;//最后的min和max。
		}
		return mid;
	}
	
	/*
	 * 折半的第二种方式:只要min小于max,就折半。	
	 */
	public static int halfSearch_2(int[] arr, int key){
		int min = 0, max = arr.length - 1, mid;
		while (min <= max){
			mid = (min + max) >> 1;
			if (key > arr[mid])
				min = mid +1;
			else if (key < arr[mid])
				max = mid - 1;
			else
				return mid;//找到mid。
		}
		return -1;//防止出现不存在的元素。
	}
	
	//定义功能,获取key第一个出现的位置。如果返回是-1,那么代表该key在数组中不存在。
	public static int getIndex(int[] arr, int key){
		for (int i = 0; i < arr.length; i++){
			if (arr[i] == key)
				return i;
		}
		return -1;
	}
	
}

运行结果如下图所示:


13)二维数组。


举例:对二维数组中的所有元素进行求和运算。
public class Array2Test {
	public static void main(String[] args) {
//		int[] arr = new int[5];//一维数组。
//		int[][] arr = new int[8][8];//定义了名称为arr的二维数组。其中有8个一维数组,每个一维数组中有8个元素。
//		System.out.println(arr);//打印二维数组arr在堆内存中的位置。
		
		/*
		 * 对二维数组中的所有元素进行求和。
		 */
		int[][] arr = {{1, 1, 1, 1}, {2, 2, 2}, {3, 5, 3, 5, 3}, {5, 3, 5, 3}};//二维数组初始话的一种方式。
		int sum = 0;//初始话和sum。
		for (int i = 0; i < arr.length; i++){
			for (int j = 0; j < arr[i].length; j++)
				sum += arr[i][j];
		}
		System.out.println("The sum is " + sum);
	}
}

运行结果如下图所示:



附言:我是Java新人,如有错误的地方请指出。
每天学习一点点,纠错一点点,进步很大点。


-------  android培训java培训java学习型技术博客、期待与您交流! ----------




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值