java学习之路 - 面向对象编程-数组-练习题(3)

public class ArrayTest {
	//创建一个包含十个int型数据的数组,int型元素为1-20之内随机数,并求和、最大值、最小值、并遍历输出
	public static void main(String[] args) {
		int[] arr = new int[8];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = (int)(Math.random() * 20);
		}
		// 遍历
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
		System.out.println();
		
		// 求和
		int sum = 0;
		for (int i = 0; i < arr.length; i++) {
			sum += arr[i];
		}
		// 求最大值
		int max = arr[0];
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] > max) {
				max = arr[i];
			}
		}
		// 求最小值
		int min = arr[0];
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] < min) {
				min = arr[i];
			}
		}
		System.out.println("sum:" + sum + ",max:" + max + ",min:" + min);
		
		// 遍历
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
		System.out.println();
	}
}

class ArrayTest2 {
	
	public static void main(String[] args) {
		int[] arr = new int[8];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = (int)(Math.random() * 20);
		}
		
		// 遍历
		for (int i = 0; i < arr.length; i++) { // 经典for循环
			int var = arr[i];
			System.out.print(var + " ");
			//var = 10000 * i; 赋值不会影响数组元素的值
		}
		System.out.println();
		
		// 增强型for循环, 仅用于遍历数组, 对于数组的访问是只读的
		/*
		for (元素类型 变量 : 数组名) {
			System.out.println(变量);
		}*/
		
		for (int var : arr) {
			System.out.print(var + " ");
			//var = 1000 * i;
		}
		
	}
}
class ArrayTest3 {
	//根据下标找出最大值、最小值
	public static void main(String[] args) {
		int[] arr = new int[8];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = (int)(Math.random() * 20);
		}
		//遍历
		for (int var : arr) {
			System.out.print(var + " ");
		}
		System.out.println();
		//0 1 2 3 4 5  6  7
		//2 6 9 0 5 11 18 0
		// 最大值下标为6
		
		int maxValueIndex = 0;
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] > arr[maxValueIndex]) {
				maxValueIndex = i;
			}
		}
		System.out.println("最大值:" + arr[maxValueIndex]);
		int minValueIndex = 0;
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] < arr[minValueIndex]) {
				minValueIndex = i;
			}
		}
		System.out.println("最小值:" + arr[minValueIndex]);
	}
}
class ArrayTest4 {
	
	public static void main(String[] args) {
		int[] arr = new int[8];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = (int)(Math.random() * 20 - 100);
		}
		//遍历
		for (int var : arr) {
			System.out.print(var + " ");
		}
		System.out.println();
		//9 13 7 13 17 14 11 5
		int max = 0x80000000;
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] > max) {
				max = arr[i];
			}
		}
		System.out.println("max:" + max);
		int min = 0x7fffffff;
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] < min) {
				min = arr[i];
			}
		}
		System.out.println("min:" + min);
	}
}
class ArrayTest5 {
	//数组复制
	public static void main(String[] args) {
		int[] arr = new int[8];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = (int)(Math.random() * 20);
		}
		//遍历
		for (int var : arr) {
			System.out.print(var + " ");
		}
		System.out.println();
		
		//0 1 2 3 4 5 6  7
		//2 1 0 6 9 2 12 3 
		//数组复制
		//0 1 2 3 4 5 6  7
		//0 0 0 0 0 0 0  0 
		//2 1 0 6 9 2 12 3 
		int[] arr2 = new int[arr.length];
		for (int i = 0; i < arr.length; i++) {
			arr2[i] = arr[i];
		}
		//遍历
		for (int var : arr2) {
			System.out.print(var + " ");
		}
		System.out.println();
	}
}
class ArrayTest6 {
	//获取子数组
	public static void main(String[] args) {
		int[] arr = new int[8];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = (int)(Math.random() * 20);
		}
		//遍历
		for (int var : arr) {
			System.out.print(var + " ");
		}
		System.out.println();
		
		//0 1 2 3 4 5 6  7
		//2 1 0 6 9 2 12 3 
		//获取子数组
		//0 1 2 3
		//0 0 0 0
		//2 1 0 6
		int[] child = new int[arr.length / 2];
		for (int i = 0; i < child.length; i++) { // 循环次数以容量小的为准
			child[i] = arr[i];
		}
		
		for (int var : child) {
			System.out.print(var + " ");
		}
		System.out.println();
	}
}
class ArrayTest7 {
	//对老数组进行赋值
	public static void main(String[] args) {
		int[] arr = new int[8];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = (int)(Math.random() * 20);
		}
		//遍历
		for (int var : arr) {
			System.out.print(var + " ");
		}
		System.out.println();
		
		//0 1 2 3 4 5 6  7
		//2 1 0 6 9 2 12 3
		//扩容
		//0 1 2 3 4 5 6  7 8 9 			15
		//0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 0 
		//2 1 0 6 9 2 12 3 0 0 0 0 0 0 0 0 
		int[] bigger = new int[arr.length * 2];
		for (int i = 0; i < arr.length; i++) {
			bigger[i] = arr[i];
		}
		arr = bigger;
		
		//遍历
		for (int var : arr) {
			System.out.print(var + " ");
		}
		System.out.println();
	}
}
class ArrayTest8 {
	//将所有偶数放入新的数组
	public static void main(String[] args) {
		int[] arr = new int[8];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = (int)(Math.random() * 20);
		}
		//遍历
		for (int var : arr) {
			System.out.print(var + " ");
		}
		System.out.println();
		
		//0 1 2 3 4 5 6  7
		//2 1 0 6 9 2 12 3
		//取出所有偶数,存入一个新数组
		//0 1 2 3 4  5 6 7
		//0 0 0 0 0  0 0 0
		//2 0 6 2 12 0 0 0 
		//最终数组
		//0 1 2 3 4
		//0 0 0 0 0 
		//2 0 6 2 12
		int[] newArr = new int[arr.length];
		int count = 0; // 最关键变量, 用于指示新数组中赋值的下标
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] % 2 == 0) {
				newArr[count] = arr[i];
				count++; // 赋完值后,自增,用于下一次再往数组中保存值时的新下标
			}
		}
		int[] finalArr = new int[count]; // 最后count值就是新数组中的有效元素个数
		for (int i = 0; i < count; i++) { // 依次把所有有效元素存入最终数组中即可
			finalArr[i] = newArr[i];
		}
		//遍历
		for (int var : finalArr) {
			System.out.print(var + " ");
		}
		System.out.println();
		// 把所有奇数提取成一个新的子数组
	}
}
class ArrayTest9 {
	 //实现数组的反转
	public static void main(String[] args) {
		int[] arr = new int[8];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = (int)(Math.random() * 20);
		}
		//遍历
		for (int var : arr) {
			System.out.print(var + " ");
		}
		System.out.println();
		
		//0 1 2 3 4 5 6  7
		//2 1 0 6 9 2 12 3
		//反转
		//3 12 2 9 6 0 1 2 
		for (int i = 0; i < arr.length / 2; i++) {
			// 交换i位置和arr.length - 1 -i位置的元素
			int tmp = arr[i];
			arr[i] = arr[arr.length - 1 - i];
			arr[arr.length - 1 - i] = tmp;
		}
		//遍历
		for (int var : arr) {
			System.out.print(var + " ");
		}
		System.out.println();
	}
}
class ArrayTest10 {
	//数组排序算法,冒泡排序
	public static void main(String[] args) {
		int[] arr = new int[8];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = (int)(Math.random() * 20);
		}
		//遍历
		for (int var : arr) {
			System.out.print(var + " ");
		}
		System.out.println();
		
		// 外循环控制比较交换的趟数, 需要处理数组长度-1趟
		for (int j = 0; j < arr.length - 1; j++) {
			// 内循环处理每趟中比较交换的次数
			for (int i = 0; i < arr.length - 1 - j; i++) { // 总是从最左边开始处理, 比较i位置和右边相邻位置的元素的值
				if (arr[i] > arr[i + 1]) { // 如果左大右小, 进行交换
					int tmp = arr[i];
					arr[i] = arr[i + 1];
					arr[i + 1] = tmp;
				}
			}
		}
		
		//遍历
		for (int var : arr) {
			System.out.print(var + " ");
		}
		System.out.println();
	}
}

class ArrayTest11 {
	//java自带的方法,改良版快速排序
	public static void main(String[] args) {
		int[] arr = new int[8];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = (int)(Math.random() * 20);
		}
		//遍历
		for (int var : arr) {
			System.out.print(var + " ");
		}
		System.out.println();
		
		Arrays.sort(arr); // 改良版快速排序
		
		//遍历
		for (int var : arr) {
			System.out.print(var + " ");
		}
		System.out.println();
		
	}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值