Java核心技术之数组

一、遍历数组:

1、一维数组

方式一:普通for循环

int[] a = {1,2,3,4,5,6,7,8,9,10};
for(int i=0;i<a.length;i++) {
	System.out.println(a[i]);
}

方式二:for each循环(增强for)

int[] a = {1,2,3,4,5,6,7,8,9,10};
for(int x : a) {
	System.out.println(x);
}

方式三:利用Arrays类的toString方法

int[] a = {1,2,3,4,5,6,7,8,9,10};
System.out.println(Arrays.toString(a));
//输出:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

2、二维数组

方式一:嵌套for循环

int[][] arr = {{16,3,2,16},{5,10,11,8},{9,6,7,12},{4,15,14,1}};
for(int i=0;i<arr.length;i++) {
	for(int j=0;j<arr[i].length;j++) {
			System.out.print(arr[i][j]+" ");
	}
}
//输出:16 3 2 16 5 10 11 8 9 6 7 12 4 15 14 1 

方式二:嵌套for each循环(增强for)

int[][] arr = {{16,3,2,16},{5,10,11,8},{9,6,7,12},{4,15,14,1}};
int i=0;	//外层循环计数器变量
for(int x[] : arr) {	//外层循环为一维数组
	i++;	//外层计数器递增
	int j = 0;	//内层循环计数器
	for(int e : x) { 	//循环遍历每一个数组元素
		j++;	//内层计数器递增
		if(i==arr.length&&j==x.length) {	//判断变量是否为二维数组中的最后一个元素
			System.out.println(e);	//输出二维数组的最后一个元素
		}else {		//如果不是二维数组中的最后一个元素
			System.out.print(e+"、");		//输出信息
		}
	}
}
//输出:16、3、2、16、5、10、11、8、9、6、7、12、4、15、14、1

方式三:利用Arrays类的deepToString方法

int[][] arr = {{16,3,2,16},{5,10,11,8},{9,6,7,12},{4,15,14,1}};
System.out.println(Arrays.deepToString(arr));
//输出:[[16, 3, 2, 16], [5, 10, 11, 8], [9, 6, 7, 12], [4, 15, 14, 1]]

二、命令行参数:

每一个Java应用程序都有一个带String arg[]参数的main方法。这个参数表明main方法将接收一个字符串数组,也就是命令行参数

例如,看一看下面这个程序:

public class Message {
	public static void main(String[] args) {
		if(args.length==0||args[0].equalsIgnoreCase("-h")) {
			System.out.print("Hello,");
		}
		else if(args[0].equals("-g")) {
			System.out.print("Goodbye,");
		}
		//print the other command-line arguments
		for(int i=1;i<args.length;i++) {
			System.out.print(" "+args[i]);
		}
		System.out.println("!");
	}
}
//输出:Hello,!

如果使用下面这种形式运行这个程序:

                 java Message -g cruel world

扫描二维码关注公众号,回复: 10402718 查看本文章

args数组将包含下列内容:

                 args[0]:"-g"

                 args[1]:"cruel"

                 args[2]:"world"

这个程序将显示下列信息:

                  Goodbye,cruel world!

注意:在Java应用程序的main方法中,程序名并没有存储在args数组中。例如,当使用下列命令运行程序时

                  java Message -h world

                  args[0]是“-h”,而不是“Message”或“Java”

三、数组排序

方法一、使用Arrays类中的sort方法

int[] array = {63,4,24,456,772,893,784,54,894,576,7,84,123,121,1,3,15};
Arrays.sort(array);
System.out.println(Arrays.toString(array));
//输出:[1, 3, 4, 7, 15, 24, 54, 63, 84, 121, 123, 456, 576, 772, 784, 893, 894]

方法二、冒泡排序

int[] array = {63,4,24,456,772,893,784,54,894,576,7,84,123,121,1,3,15};
for(int i=1;i<array.length;i++) {
	for(int j=0;j<array.length-i;j++) {
		if(array[j]>array[j+1]) {
			int temp = array[j];
			array[j] = array[j+1];
			array[j+1] = temp;
		}
	}
}
System.out.println(Arrays.toString(array));
//输出:[1, 3, 4, 7, 15, 24, 54, 63, 84, 121, 123, 456, 576, 772, 784, 893, 894]

方法三、直接选择排序

for (int i = 1; i < array.length; i++) {
	index = 0;
	for (int j = 1; j <= array.length - i; j++) {
		if (array[j] > array[index]) {
			index = j;
		}
		int temp = array[array.length - i];
		array[array.length - i] = array[index];
		array[index] = temp;
	}
}
System.out.println(Arrays.toString(array));
//输出:[1, 3, 4, 7, 15, 24, 54, 63, 84, 121, 123, 456, 576, 772, 784, 893, 894]

四、二维数组的应用

1、二维数组的排序

例如:将二维数组的每行数据从小到大排序

int[][] arr = {{16,3,2,16},{5,10,11,8},{9,6,7,12},{4,15,14,1}};
for (int m = 0; m < arr.length; m++) {
	for (int n = 1; n < arr[m].length; n++) {
		for (int j = 0; j < arr[m].length - n; j++) {
			if (arr[m][j] > arr[m][j + 1]) {
				int temp = arr[m][j];
				arr[m][j] = arr[m][j + 1];
				arr[m][j + 1] = temp;
			}
		}
	}

}
System.out.println(Arrays.deepToString(arr));
//输出:[[2, 3, 16, 16], [5, 8, 10, 11], [6, 7, 9, 12], [1, 4, 14, 15]]

实质上就是让每个一维数组排序!

2、将一个八行八列的二维数组的每行前五个数存入五行八列的二维数组中。

public class Example{
    public static void main(String[] args){
        HashSet<Integer> hashSet = new HashSet<Integer>();
		ArrayList<Integer> arrayList = new ArrayList<Integer>();
		int First[][] = new int[8][8]; // 生成一个8行8列的二维数组
		int Second[][] = new int[5][8];
        //将生成的范围为[100,1000)的随机数放进八行八列的二维数组中
        for (int j = 0; j < First.length; j++) {
			for (int k = 0; k < First.length; k++) {
				Racing_Horse.randomNumberGenerator(hashSet);
				arrayList.addAll(hashSet);
				First[j][k] = arrayList.get(r++);
			}
		}
        //八行八列的二维数组的每行前五个数据存入五行八列的二维数组中
        for (int m = 0; m < 8; m++) {
			for (int n = 0; n < 5; n++) {
				Second[a][b++] = First[m][n];
				if (b > 7) {
					b = 0;
					if (a < 4) {
						a++;
					}
				}
			}
		}
    
}
    public static HashSet<Integer> randomNumberGenerator(HashSet<Integer> hashset) {
		for (int i = 0; i < 100; i++) {
			int time = 100 + (int) (Math.random() * 900);
			hashset.add(time);
		}
		return hashset;
	}
}
发布了50 篇原创文章 · 获赞 33 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/leilei107/article/details/93986792