黑马程序员————学习笔记(第四天)

 —————————— ASP.Net+Android+IOS开发.Net培训、期待与您交流!——————————

数组的操作

  1.遍历

    获取数组中的元素

  练习代码:Demo01.java

/*
遍历数组练习
定义一个方法遍历已知数组并打印每个元素
*/

class Demo01
{
	public static void main(String[] args) 
	{
		int[] arr = {6,7,3,1,8,2,19};
		printArray(arr);

	}

	// 打印数组中每个元素
	public static void printArray(int[] arr)
	{
		for (int x = 0; x < arr.length; x++)
		{
			if (x != arr.length - 1)
				System.out.print(arr[x]+", ");
			else
				System.out.println(arr[x]);
		}
	}
}

  2.取最值

    获取数组中的最大值和最小值

  练习代码:ArrayTest01.java

/*
给定数组{1,5,6,8,12,3,4,9}
需求:获取上面数组的最大值,最小值。

最大值获取:
思路:
1.需要每一个元素进行比较,则可以定义一个第三方变量进行临时存储每次比较后的最大值。
2.让数组中的每个元素都与这个变量进行比较,用变量存储较大的值。
3.当每个元素比较完成,变量中的值就是最大值。

步骤:
1.定义变量,初始化值为数组的任意元素的值。
2.通过循环对数组进行遍历。
3.在遍历时进行判断,如果遍历到的元素的值大于变量值,就赋值给变量。

*/

class ArrayTest01
{
	public static void main(String[] args) 
	{
		int[] arr = {1,5,6,8,12,3,4,9};
		System.out.println("max = " + getMax(arr)); // 打印最大值
		System.out.println("min = " + getMin(arr)); // 打印最小值
	}

	/*
	获取最大值
	*/
	public static int getMax(int[] arr)
	{
		int max = arr[0];
		for (int x = 1; x < arr.length; x++)
		{
			if (max < arr[x])
				max = arr[x];
		}
		return max;
	}
	
	/*
	获取最小值
	*/
	public static int getMin(int[] arr)
	{
		int min = arr[0];
		for (int x = 1; x < arr.length; x++)
		{
			if (min > arr[x])
				min = arr[x];
		}
		return min;
	}
}

  3.排序

    (1)选择排序

      特点:内循环结束一次,最值就出现在头角标位上。

    (2)冒泡排序

      特点:每比较一次,较小的数往前移,较大的数往后移,第一次比较完毕,最值确定在末尾。

    代码练习:ArrayTest02.java

/*
对以下数组进行升序排序:
{1,5,9,6,7,2,3}

选择排序:
思路:
1.先用0角标元素与后面其他的元素比较一下,如果0角标元素较大,则往后排列。
2.在用1角标元素和后面的元素进行比较。
3.以此类推。。。

步骤:
1.定义一个功能,使用for循环嵌套,外循环与内循环的每个元素挨着比较。
2.在比较过程中,用if条件语句判断当前比较的元素是否需要换位。
3.排序完毕无需返回值,因为排序操作后的数组和应用的数组是同一个数组。

冒泡排序:
思路:
1.第一圈,从第一个元素开始,每个元素与后面相邻的一个元素比较,
较大的数放在后面,比较完毕后最大值就在最后角标。
2.第二圈,再从第一个元素开始,但是这次不用比较最后一个角标元素。
3.第三圈,也从第一个元素开始,但是这次不用比较最后一个和倒数第二个元素。
4.以此类推。。。

*/

class ArrayTest02
{
	public static void main(String[] args) 
	{
		int arr[] = {1,5,9,6,7,2,3};
		printArray(arr);
		//selectSort(arr);
		bubbleSort(arr);
		printArray(arr);
	}

	// 选择排序
	public static void selectSort(int[] arr)
	{
		for (int x = 0; x < arr.length - 1; x++)
		{
			for (int y = x; y < arr.length; y++)
			{
				if (arr[x] > arr[y])
				{
					swap(arr,x,y);
				}
			}
		}
	}

	// 冒泡排序
	public static void bubbleSort(int[] arr)
	{
		for (int x = 0; x < arr.length - 1; x++)
		{
			// -x:让每次比较的元素减少一个(末尾排列),-1:避免角标越界
			for (int y = 0; y < arr.length - x - 1; y++)
			{
				if (arr[y] > arr[y+1])
				{
					swap(arr,y,y+1);
				}

			}
		}
	}

	// 位置置换
	public static void swap(int[] arr,int x,int y)
	{
		int temp = arr[x];
		arr[x] = arr[y];
		arr[y] = temp;
	}

	// 打印数组中每个元素
	public static void printArray(int[] arr)
	{
		System.out.print("[");
		for (int x = 0; x < arr.length; x++)
		{
			if (x != arr.length - 1)
				System.out.print(arr[x]+", ");
			else
				System.out.println(arr[x] + "]");
		}
	}

}

  4.折半查找

    使用范围:有序的数组

    方法:给定一个字值,在数组中,(角标最小值+最大值)/2得到中间值,如果与该值不同则继续查找,直到找到为止。如果角标最小值大于了角标最小值,则数组中没有该值,应该返回-1,供给调用者处理。

 

  5.十进制转二进制

  练习代码:ArrayTest03.java

class ArrayTest03
{
	public static void main(String[] args) 
	{
		toBin(10);
	}

	/*
	需求:十进制转二进制
	*/
	public static void toBin(int num)
	{
		StringBuffer sb = new StringBuffer(); // 存储数据的一个容器
		while (num > 0)
		{
			sb.append(num%2); // 添加每次模2的值到容器内
			num = num /2;
		}
		System.out.println(sb.reverse()); // reverse为容器数据倒序方法
	}
}

  6.十进制转十六进制和二进制

  练习代码:ArrayTest04.java

/*
查表法十进制转十六进制和二进制
*/

class ArrayTest04
{
	public static void main(String[] args) 
	{
		//toHex(60);
		toBin(6);
	}

	public static void toHex(int num)
	{
		char[] chs = {'0','1','2','3',
			'4','5','6','7',
			'8','9','A','B',
			'C','D','E','F'};
		// 定义一个临时存储数组
		char[] arr = new char[8];
		int pos = arr.length;
		while (num != 0)
		{
			int temp = num & 15;
			arr[--pos] = chs[temp];
			num = num >>> 4;
		}

		// 遍历数组
		for (int x = pos; x < arr.length; x++)
		{
			System.out.print(arr[x] + ",");
		}
	}

	public static void toBin(int num)
	{
		char[] chs = {'0','1'};
		char[] arr = new char[32];
		int pos = arr.length;
		while (num != 0)
		{
			int temp = num & 1;
			arr[--pos] = chs[temp];
			num = num >>> 1;
		}

		for (int x = pos; x < arr.length; x++)
		{
			System.out.print(arr[x]);
		}
	}
}

  7.相同功能代码抽取

  练习代码:ArrayTest05.java

class ArrayTest05
{
	public static void main(String[] args) 
	{
		toHex(60);
		toBin(6);
		toBa(60);
	}
	// 转十六进制
	public static void toHex(int num)
	{
		trans(num,15,4);
	}
	// 转二进制
	public static void toBin(int num)
	{
		trans(num,1,1);
	}
	// 转八进制
	public static void toBa(int num)
	{
		trans(num,7,3);
	}

	public static void trans(int num,int base,int offset)
	{
		if (num == 0)
		{
			System.out.println(0);
			return ;
		}
		char[] chs = {'0','1','2','3',
			'4','5','6','7',
			'8','9','A','B',
			'C','D','E','F'};
		char[] arr = new char[32];
		int pos = arr.length;
		while (num != 0)
		{
			int temp = num & base;
			arr[--pos] = chs[temp];
			num = num >>> offset;
		}

		for (int x = pos; x < arr.length; x++)
		{
			System.out.print(arr[x]);
		}
		System.out.println();
	}
}

二维数组

  定义:在一维数组中的一维数组。

  格式1:int[][] arr = new int[3][2];

  解释:

  1.在arr二维数组中,一共有3个一维数组

  2.每一个一维数组中共有两个int类型的元素。

  3.每个一维数组的名称分别为:arr[0] arr[1] arr[2]

  4.给第一个一维数组中角标为1的元素赋值为23的方法:arr[0][1] = 23


  格式2:int[][] arr = new int[3][];

  解释:

  1.二维数组中有3个一维数组

  2.每个一位数组的初始化值为null

  3.可以对每个一维数组进行初始化如:

  arr[0] = new int[3];

  arr[1] = new int[1];

  arr[2] = new int[4];


  练习代码:Array2Test01.java

/*
对下列二维数组进行每个元素的累加
{{3,4,1,2},{5,9,1,8},{2,4,7,9},{6,5,3,9}}

思路:
1.由于二维数组中的元素是一维数组,而想要得到的值在一维数组内,
应该使用循环嵌套。
2.在取得值后进行累加

步骤:
1.使用外循环遍历每个一维数组
2.使用内循环遍历每个一维数组中的每个元素
3.定义一个变量参与进行内循环累加操作

*/

class Array2Test01
{
	public static void main(String[] args) 
	{
		int[][] arr = {{3,4,1,2},{5,9,1,8},{2,4,7,9},{6,5,3,9}};
		int sum = 0;
		for (int x = 0; x < arr.length; x++)
		{
			for (int y = 0; y < arr[x].length; y++)
			{
				sum = sum + arr[x][y];
			}
		}

		System.out.println("sum = " + sum);
	}
}

  一般格式:

  int[][] arr;

  int arr[][];

  int[] arr[];


  特殊格式:

  int[] x,y[];

  解释:x为一维数组,y为二维数组。

  就好比:

  int x,y;

  拆分后是

  int x;

  int y;

  所以int[] x,y[];

  拆分后

  int[] x;

  int[] y[];


 —————————— ASP.Net+Android+IOS开发.Net培训、期待与您交流!——————————

你可能感兴趣的:(Java学习笔记)