java学习日志(七)-- 数组Array

以前学习数组时写的一些小程序--主要是跟着老毕学的。

class ArrayDemo
{
	public static void main(String[] args){
//		两种方法均可
//		int[] arr = new int[2];
//		int arr = new int[2];
//		数组静态初始化
//		int[] arr = new int[]{1,2,3};
//		int[] arr = {1,2,3};
		
		int [] arr = new int[3];
		System.out.println(arr[1]);
		arr = null;
		System.out.println(arr[1]);
		//ArrayIndexOutOfBoundsException:数组角标越界异常,操作数组时,访问到了数组中不存在的角标。
		//NullPointerException:空指针异常,当引用没有任何指向值为null的情况,该引用还在用于操作实体。
	}
}
class ArrayDemo2
{
	public static void main(String[] args){
//		数组中的操作:
//		获取数组中的元素
		
//		int[] arr = new int[3];
//		数组中有一个属性可以直接获取到数组元素的个数—length
//		使用方式:数组名称.length
		int[] arr = { 2, 3, 4, 5, 12};
//		System.out.println( arr.length );
//		for(int x = 0; x < arr.length; x++){
//			System.out.println("arr[" + x + "]=" + arr[x]);
//		}

//		[I@[I@15db9742
//		“[”--表示数组
//		“I“--表示数组类型是Integer
//		“15db9742“--哈希算法算出的数组地址,哈希值,十六进制
		System.out.println(arr);
		printArray(arr);
		printArray(arr);
	}

	//定义一个功能,用于打印数组中的元素。元素间用逗号隔开。
	public static void printArray(int[] arr){
		for(int x = 0; x < arr.length-1;  x++){
			System.out.print(arr[x] + ",");
		}
		System.out.println(arr[arr.length-1]);
	}
}
class ArrayText
{
	public static void main(String[] args){
	/*
		获取数组中的最大值,最小值
		思路:
			1、获取最值需要进行比较,每一次比较都会有一个较大的值。因为该值不确定,通过一个变量进行临时存储。
			2、让数组中的每一个元素都和这个变量中的值进行比较,如果大于了变量中的值,就用该变量记录较大的值。
			3、当所有的元素都比较完成,那么改变量中存储的就是数组中的最大值了。

		步骤:
			1、定义变量。初始化为数组中任意一个元素即可。
			2、通过循环语句对数组进行遍历。
			3、在遍历过程中定义判断条件,如果遍历到的元素比变量中的元素大时,就赋值给该变量。

		需要定义一个功能来完成,以便提高复用性。
			1、明确结果,数组中最大元素, int。
			2、未知内容,一个数组, int[]
	*/
	int[] arr = {2, 4, 5, 6, 123, 45, 11};
	System.out.println(getMax(arr));
	System.out.println(getMaxx(arr));

// boolean型数组默认值是false
	boolean[] ar = new boolean[3];
	System.out.println(ar[1]);

	}
	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 getMaxx(int[] arr){
		int maxx = 0;
		for(int x = 0; x < arr.length; x++){
			if (arr[x] > arr[maxx])
			{
				maxx = x;
			}
		}
		return arr[maxx];
	}

	/*
	获取double类型数组的最大值。因为功能一致,所以函数名称相同。以重载形式存在。
	public static double getMax(double[] arr){
	

	return double;
	}
	*/
}
import java.util.Arrays;

class ArrayText2
{
	public static void main(String[] args){
	
	int[] arr = { 4, 5, 6, 23, 1, 3};
	selectSort(arr);
	printArr(arr);

	int[] ar = { 4, 5, 6, 23, 1, 3};
	bubbleSort(ar);
	printArr(ar);

	int[] a = { 4, 5, 6, 23, 1, 3};
	System.out.println("自带排序方法:");
	Arrays.sort(a);
	printArr(a);
	}

	//选择排序
	public static void selectSort(int[] arr){
		System.out.println("选择排序分步结果:");
		for(int x = 0; x < arr.length - 1; x++){
			for(int y = x + 1; y < arr.length; y++){
				if(arr[x] > arr[y]){
					printArr(arr);
					int temp = arr[x];
					arr[x] = arr[y];
					arr[y] = temp;
					
				}
			}
		}
	}

	//冒泡排序
	public static void bubbleSort(int[] arr){
		System.out.println("冒泡排序分步结果:");
		for (int x = 0; x < arr.length -1; x++) //for(int x=arr.length-1; x>0; x--)
		{																//for(int y=0; y<x; y++)
			for(int y = 0; y < arr.length - x -1; y++){ //-x:让每一次比较的元素减少, -1:避免角标越界
				if (arr[y] > arr[y+1])
				{
					printArr(arr);
					int temp = arr[y];
					arr[y] = arr[y+1];
					arr[y+1] = temp;
					
				}
			}
		}
	}

	//打印数组
	public static void printArr(int[] arr){
		System.out.print("[ ");
		for(int i : arr){
			System.out.print(i + " ");
		}
		System.out.println("]");
	} 
}
class ArrayText3
{
	public static void main(String[] args){
		int[] arr = {3, 1, 32, 15, 12, 7, 12};
		int index = getIndex(arr, 12);
		System.out.println("index=" + index);

		int[] ar = {2, 3, 5, 7, 12, 34, 57};
		System.out.println("index=" + halfSearch(ar,345));
		System.out.println("index=" + halfSearch_2(ar,55));
	}
	//定义功能:获取key第一次出现的位置。如果返回-1,那么代表该key在数组中不存在。
	public static int getIndex(int[] arr, int key){
		for(int x = 0; x < arr.length; x++){
			if (arr[x] == key)
			return x;
		}
		return -1;
	}

	public static int getIndex_2(int[] arr, int key){
		int min, max, mid;
		min = 0;
		max = arr.length - 1;
		mid = (min + max) / 2;

		while(arr[mid] != key){
			if(arr[mid] > key){
				max = mid -1;
			} else {
				min = mid +1;
			}
			mid = (min + max) / 2;
			if(min > max)
				return -1;
		}
		return min;
	}

//折半查找,提高效率,但是必须要保证数组时有序的
	public static int halfSearch(int[] arr, int key){
		int min, max, mid;
		min = 0;
		max = arr.length - 1;
		mid = (min + max) / 2;

		while(arr[mid] != key){
			if(arr[mid] > key){
				max = mid -1;
			} else {
				min = mid +1;
			}
			mid = (min + max) / 2;
			if(min > max)
				return -1;
		}
		return mid;
	}

//	折半查找的第二种方式
	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;
			}
		}
		return -1;
	}
}
class ArrayText4
{
	public static void main(String[] args){
//		toBin(6);	
		toHex(60);
	}

	public void ArrayText4(){}

// 10进制-->16进制
//	public static void toHex(int num){
//		StringBuffer sb = new StringBuffer();
//		for(int x = 0; x < 8; x++){
//			int temp = num & 15; //&0000 0000 0000 0000 0000 0000 0000 1111,每次取得四位
//			if(temp > 9)
//				sb.append((char)(temp - 10 + 'A'));
//			else
//				sb.append(temp);
//			num = num >>> 4;
//		}
//		System.out.println(sb.reverse());
//	}

// 10进制-->2进制
	public static void toBin(int num){
		StringBuffer sb = new StringBuffer();
		while(num > 0) {
			sb.append(num % 2);
			num /= 2;
		}
		System.out.println(sb.reverse()); //反转
	}

//	查表法:将所有元素临时存储起来。建立对应关系。
// 每一次&15后的值作为索引去查建立好的表,就可以找到对应的元素。
// 表的建立:通过数组

	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 = 0;
		while( num != 0 ) { //移位后形成的新数不为0,这样可以去除多余的0
			int temp = num & 15;
//			System.out.println(chs[temp]);
			arr[pos++] = chs[temp];
			num = num >>> 4;
		}

		for (int x = pos - 1; x >= 0; x--)
		{
			System.out.print(arr[x]);
		}
		System.out.println();
	}

}
class ArrayText5
{
	public static void main(String[] args){
		toBin(0);
		toBin(60);
		toBin(-60);
		toOct(60);
		toOct(-60);
		toHex(60);
		toHex(-60);
	}
// 10进制 --> 2进制
	public static void toBin(int num){
		trans(num,1,1);
		System.out.println();
	}

// 10进制 --> 8进制
	public static void toOct(int num){
		trans(num,7,3);
		System.out.println();
	}

// 10进制 --> 16进制
	public static void toHex(int num){
		trans(num,15,4);
		System.out.println();
	}

	public static void trans(int num, int base, int offset){
		if (num == 0) {
			System.out.print(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]);
		}
	}
}






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值