Java基础知识复习(三)--数组

1.冒泡法排序

冒泡法排序的思路:

  • 第一步:从第一位开始,把相邻两位进行比较如果发现前面的比后面的大,就把大的数据交换在后面,循环比较完毕后,                 最后一位就是最大的
  • 第二步: 再来一次,只不过不用比较最后一位

以此类推

package review3;

public class Test2 {

	public static void main(String[] args) {

			int[] a = new int[6];
			bubble(a,a.length);
		}
		static void bubble(int[] a, int i) {
			//未排序
			System.out.print("未排序:");
			for(int j = 0; j < i; j++) {
				//生成1~100的随机数
				a[j] = (int) (Math.random()*100);
				System.out.print(a[j]+" ");
			}
			for(int j = 0; j < i-1; j++) {
				for(int k = 0; k < i-j-1; k++) {
					if(a[k] > a[k+1]) {
						int temp = a[k];
						a[k] = a[k+1];
						a[k+1] = temp;	
					}				
				}
				
			}
			//冒泡排序后
			System.out.print("\n冒泡排序后:");
			for(int j = 0; j < i; j++) {
				System.out.print(a[j]+"  ");
			}
		}
	}



2.选择法排序

选择法排序的思路:

  • 把第一位和其他所有的进行比较,只要比第一位小的,就换到第一个位置来,比较完后,第一位就是最小的,
  • 然后再从第二位和剩余的其他所有进行比较,只要比第二位小,就换到第二个位置来,比较完后,第二位就是第二小的

以此类推

package review3;

import java.lang.reflect.Array;
import java.util.Scanner;

public class Text1 {

	public static void main(String[] args) {
		int[] a = new int[6];
		select(a,a.length);
	}
	static void select(int[] a, int i) {
		//未排序
		System.out.println("未排序:");
		for(int j = 0; j < i; j++) {
			//生成1~100的随机数
			a[j] = (int) (Math.random()*100);
			System.out.print(a[j]+"  ");
		}
		for(int j = 0; j < i-1; j++) {
			for(int k = j+1; k < i; k++) {
				if(a[j] > a[k]) {
					int temp = a[k];
					a[k] = a[j];
					a[j] = temp;
				}
			}
		}
		//选择排序后
		System.out.println("\n选择排序后:");
		for(int j = 0; j < i; j++) {
			System.out.print(a[j]+"  ");
		}
	}
}

3.用增强型for循环找出最大的那个数

   利用增强型for循环遍历数组,每次都与最大值变量max比较,如果遍历到的值大于max则把值赋予max。

  需要注意的是:增强型for循环只能用来取值,却不能用来修改数组里的值

package review3;

public class Test3 {
	public static void main(String[] args) {
		
		int[] a = new int[5];
		int max = 0;
		//企图用增强型for循环和随机数初始化数组
		for(int value : a) {
			value = (int)(Math.random()*100);		
		}
		
		System.out.print("企图用增强型for循环初始化数组失败:"); 
		//普通for循环和随机数初始化数组
		for(int i = 0; i < a.length; i++) {
			System.out.print(a[i]+" ");
			a[i] = (int)(Math.random()*100);
		}
		System.out.print("\n普通for循环初始化数组");
		//增强型for循环筛选出最大值
		for(int value : a) {
			System.out.print(value+" ");
			if(value > max) {
				max = value;
			}
		}
		
		System.out.println("\n最大值:"+max);
		
	}
}

4.练习-合并数组

  首先准备两个数组,他俩的长度是5-10之间的随机数,并使用随机数初始化这两个数组,然后准备第三个数组,第三个数组的长度是前两个的和,最后通过System.arraycopy 把前两个数组合并到第三个数组中

package review3;

import java.util.Random;

public class Test4 {

	public static void main(String[] args) {
		int a = (int)(Math.random()*6+5);//生成5~10的随机数
		int b = new Random().nextInt(6)+5;//生成5~10的随机数
		int[] array1 = new int[a];
		int[] array2 = new int[b];
		int[] array3 = new int[a+b];
		
		System.out.println("数组1的内容:");
		
		for(int i = 0; i < array1.length; i++) {
			array1[i] = new Random().nextInt(100)+1;//生成1~100的随机数
			System.out.print(array1[i]+" ");
		}
		
		System.out.println("\n数组2的内容:");
		
		for(int i = 0; i < array2.length; i++) {
			array2[i] = new Random().nextInt(101)+1;//生成1~100的随机数
			System.out.print(array2[i]+" ");
		}
		//复制数组
		/**System.arraycopy(src, srcPos, dest, destPos, length)

		 *rc: 源数组
		 *srcPos: 从源数组复制数据的起始位置
		 *dest: 目标数组
		 *destPos: 复制到目标数组的起始位置
		 *length: 复制的长度
		 **/
		System.arraycopy(array1, 0, array3, 0, array1.length);
		System.arraycopy(array2, 0, array3, array1.length, array2.length);
		
		System.out.println("\n合并后的数组:");
		for(int value : array3) {
			System.out.print(value+" ");
		}
	}

}

   5.练习-二维数组 

      定义一个5X5的二维数组。 然后使用随机数填充该二维数组,找出这个二维数组里,最大的那个值,并打印出其二维坐标

package review3;

import java.util.Random;

public class Test5 {

	public static void main(String[] args) {
		int[][] a = new int[5][5];
		int max = 10;
		//最大值的坐标值
		int x = 0;
		int y = 0;
		System.out.println("初始化二维数组:");
		for(int i = 0; i < 5; i++) {
			for(int j = 0; j < 5; j++) {
				//随机生成10~99的整数
				a[i][j] = new Random().nextInt(90)+10;
				System.out.print(a[i][j]+"   ");
			}
			System.out.println();
		}
		
		for(int i = 0; i < 5; i++) {
			for(int j = 0; j < 5; j++) {
				if(a[i][j] > max) {
					max = a[i][j];
					x = i;
					y = j;
				}
			}		
		}
		System.out.print("找到最大值:"+max);
		System.out.printf(",其坐标是[%d][%d]",x,y);
	}

}

猜你喜欢

转载自blog.csdn.net/qq_41900081/article/details/84725161