Java基础-数组操作

Java基础-数组操作

原创诗词

《送别》 作者:沙家大少
大风难进深院墙,肢体难胜夏日署。一日嘈嚷多少事?静坐静想浑不知!
多日相识算相知,心愿不要就此辞。世事本无月圆日,鸾飞蝶舞是梦时。
恨风恨雨恨秋月,最深却数永难见。愿君日后能安好,他日再见莫不识!

如果这篇文章对您有帮助,或是觉得小弟诗词天赋还可以,还请求点个赞!
知识无价,劳动不易,欢迎打赏。
感谢!

在这里插入图片描述

遍历数组

for 循环可以遍历数组
for(;;)循环通过下标遍历数组
for each 循环直接遍历数组元素,无法直接访问索引
直接打印数组变量,得到的是数组在JVM中的引用地址,我们可以用for each打印,但是写起来也很麻烦
Arrays.toString()可以快速打印数组内容

import java.util.Arrays;

public class Main {
	public static void main(String[] args) {
		int[] ns = { 1, 1, 2, 3, 5, 8 };
		System.out.println(ns); // 类似 [I@7852e922
		System.out.println(Arrays.toString(ns));
	}
}

在这里插入图片描述

数组排序

冒泡排序法

import java.util.Arrays;

public class Main {
	public static void main(String[] args) {
		int[] ns = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36 };
		// 排序前:
		System.out.println(Arrays.toString(ns));
		// 排序:
		for (int i = 0; i < ns.length; i++) {
			for (int j = i + 1; j < ns.length; j++) {
				if (ns[i] > ns[j]) {
					// 交换ns[i]和ns[j]:
					int tmp = ns[j];
					ns[j] = ns[i];
					ns[i] = tmp;
				}
			}
		}
		// 排序后:
		System.out.println(Arrays.toString(ns));
	}
}

在这里插入图片描述

交换变量

交换两个变量的值必须通过一个临时变量

int x = 1;
int y = 2;

// 错误写法:
x = y;
y = x;
System.out.println(x); // 2
System.out.println(y); // 2

// 正确写法:
int t = x;
x = y;
y = t;
System.out.println(x); // 2
System.out.println(y); // 1

使用Arrays.sort

Arrays.sort内部使用了快速排序算法,对于大数组会使用快速排序,对小数组仍然使用冒泡排序

使用JDK的Arrays.sort()排序

import java.util.Arrays;

public class Main {
	public static void main(String[] args) {
		int[] ns = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36 };
		Arrays.sort(ns);
		System.out.println(Arrays.toString(ns));
	}
}

在这里插入图片描述
如果我们想要看JDK Arrays.sort的源码,我们可以按住ctrl + 鼠标左键点击sort方法,如果eclipse没有显示出源码,我们可以点击Attach Source添加JDK源码,一般JDK源码都在JDK根目录下
在这里插入图片描述
在这里插入图片描述

对数组排序修改了数组本身

int ns[] = {9, 3, 6, 5};
Arrays.sort(ns);

在这里插入图片描述

int ns[] = {"banana", "apple", "pear"};
Arrays.sort(ns);

在这里插入图片描述

总结

常用的排序算法:冒泡排序,比较排序,快速排序
冒泡排序使用两层for循环实现
交换变量的值需要通过一个中间变量来实现
可以使用JDK的Arrays.sort()排序
Ctrl + 鼠标左键可以快速查看源码
对数组排序会直接修改数组本身

多维数组

二维数组

二维数组就是数组的数组,二维数组的元素是一维数组
访问二维数组元素使用:array[row][col]
二维数组的每个数组元素长度不要求相同

二维数组在内存中的结构:
在这里插入图片描述

打印二维数组长度

int[][] ns = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
System.out.println(ns.length); // 3

获取二维数组的第一个元素

int[][] ns = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
int[] arr0 = ns[0];
System.out.println(Arrays.toString(arr0)); // 1, 2, 3, 4

获取二维数组中的一个数

int[][] ns = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
System.out.println(ns[1][2]); // 7

二维数组中的数组元素长度不相等

int[][] ns = {{1, 2, 3, 4}, {5, 6}, {7, 8, 9}};

在这里插入图片描述

三维数组

在这里插入图片描述

代码演习

import java.util.Arrays;

public class Main {
	public static void main(String[] args) {
		int[][] stds = {
				// 语文, 数学, 英语, 体育
				{ 68, 79, 95, 81 },
				{ 91, 89, 53, 72 },
				{ 77, 90, 87, 83 },
				{ 92, 98, 89, 85 },
				{ 94, 75, 73, 80 }
		};
		System.out.println(stds.length);
		System.out.println(Arrays.toString(stds));
		System.out.println(Arrays.deepToString(stds));
		// TODO: 遍历二维数组,获取每个学生的平均分:
		for (int[] std : stds) {
			int sum = 0;

			int avg = sum / std.length;
			System.out.println("Average score: " + avg);
		}
		// TODO: 遍历二维数组,获取语文、数学、英语、体育的平均分:
		int[] sums = { 0, 0, 0, 0 };
		for (int[] std : stds) {

		}
		System.out.println("Average Chinese: " + sums[0] / stds.length);
		System.out.println("Average Math: " + sums[1] / stds.length);
		System.out.println("Average English: " + sums[2] / stds.length);
		System.out.println("Average Physical: " + sums[3] / stds.length);
	}
}

在这里插入图片描述

总结

多维数组是数组的数组
多维数组的每个数组元素长度不要求相同
打印多维数组可以使用Arrays.deepToString()
最常见的多维数组是二维数组
访问二维数组的一个元素用array[row][col]

命令行参数

命令行参数是一个String[]数组,由JVM接收用户输入并传给main

根据参数执行不同代码

public class Hello {
	public static void main(String[] args) {
		for(String arg : args) {
			if("-version".equals(arg)) {
				System.out.println("v 1.0");
			}
		}
	}
}

代码演示

public class Main {
	public static void main(String[] args) {
		System.out.println("Number of args: " + args.length);
		for (String arg : args) {
			System.out.println(arg);
		}
	}
}

在这里插入图片描述
我们切换到windows命令行
在这里插入图片描述
我们还可以在eclipse中输入命令行参数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

命令行参数是String[]
命令行参数用JVM接收用户输入并传给main方法
如何解析命令行参数由自己决定

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值