一、数组的遍历
数组的遍历有两种方法,一种是使用for循环,另一种是使用for each。
for each的基本使用方法为:
for (int element:ns) {
System.out.println(element); // element直接返回ns数组里面的元素
}
需要注意的是:
二、数组的快速打印
数组的打印也有两种方法,一种是使用for循环或者for each挨个打印元素,另一种是转换成字符串直接打印。
转换成字符串直接打印看起来更加简洁,需要使用到方法Arrays.toString()
,使用方法之前需要import java.util.Arrays
,这个编译器会自动帮你生成。
import java.util.Arrays; // 导入标准库函数
System.out.println(Arrays.toString(ns)); // 转化成字符串打印输出
需要注意的是:
如果是使用ns.toString()
返回的是字符串的地址
只有使用Arrays.toString(ns)
返回的才是字符串本身
数组在转换成字符串在打印的时候,不会自动添加换行
三、代码案例
import java.util.Arrays;
public class ArrayOperation {
public static void main(String[] args) {
// 新建一个数组
int[] ns = {1,4,9,16,25};
// 1,使用for循环遍历数组
for (int i=0;i<ns.length;i++){
System.out.println(ns[i]);
}
// 2,使用for each 遍历数组
// for each循环更加简洁,但是拿不到下标索引
// 这里的element不是一个索引!
// 这里的element相当于一个迭代器,从ns[]这个数组里面挨个提取内容
for (int element:ns) {
System.out.println(element);
}
// 3,快速打印数组里面的内容
// 要想快速打印数组里面的内容,需要把数组转变成字符串
// Java标准库里面提供了这种方法:Arrays.toString()
// 3.1 注意这个写法是错误的,将会返回字符串的引用地址!
System.out.println(ns.toString());
// 3.2 这个写法才能返回字符串里面的内容
System.out.println(Arrays.toString(ns));
}
}
一、冒泡排序
数组冒泡排序最容易错的有两点:
数组冒泡排序的核心代码
for (int i=0;i<ns.length-1;i++) {
for (int j=1;j<ns.length-i;j++) {
// 开始比较大小,小的在前,大的在后
if (ns[j-1]>ns[j]) { // 进行交换
int temp = ns[j-1]; ns[j-1] = ns[j]; ns[j] = temp;
} } }
System.out.println(Arrays.toString(ns));
二、快速排序
Java标准库内置了一个Arrays.sort()
方法,可以直接调用
三、代码示例
这里面包含了自己身上犯的两个常见错误
import java.util.Arrays;
public class ArrayOperation {
public static void main(String[] args) {
// 新建一个数组
int[] ns = {28, 12, 89, 73, 65, 18, 96, 50, 8, 36};
// 1, 练习冒泡排序
for (int i=0;i<ns.length-1;i++) {
for (int j=i+1;j<ns.length;j++) {
int left = ns[j-1];
int right = ns[j];
// 进行排序,小的在前,大的在后
if (left>right){
// 交换大小
int temp = left;
left = right;
right = temp;
} //end if
} // end for j
} // end for i
// 你会惊讶地发现,数组没有发生任何改变!
// 怎么回事?
// 因为数组的本质是引用
System.out.println(Arrays.toString(ns));
//[28, 12, 89, 73, 65, 18, 96, 50, 8, 36]
// 2, 重来冒泡排序
for (int i=0;i<ns.length-1;i++) {
for (int j=i+1;j<ns.length;j++) {
// 开始比较大小,小的在前,大的在后
// 直接使用数组下标索引试试看
if (ns[j-1]>ns[j]) {
// 进行交换
int temp = ns[j-1];
ns[j-1] = ns[j];
ns[j] = temp;
} //end if
}//end for j
}//end for i
// 你会惊讶地发现,仍然出错了,咋回事?
// 想象一下,大的泡泡一直往后冒,所以最后一个元素是确定的
// 所以第二层遍历应该是从最左边到排好序的那个元素,
// 即j的范围应该是[1,ns.length-i]
System.out.println(Arrays.toString(ns));
//12, 28, 18, 50, 8, 36, 65, 73, 89, 96]
// 3, 再来冒泡排序
for (int i=0;i<ns.length-1;i++) {
for (int j=1;j<ns.length-i;j++) {
// 开始比较大小,小的在前,大的在后
if (ns[j-1]>ns[j]) {
// 进行交换
int temp = ns[j-1];
ns[j-1] = ns[j];
ns[j] = temp;
} //end if
}//end for j
}//end for i
System.out.println(Arrays.toString(ns));
//[8, 12, 18, 28, 36, 50, 65, 73, 89, 96] 成功!
// 4,使用系统自带的排序方法
ns = new int[] {23,45,67,89,10};
Arrays.sort(ns);
System.out.println(Arrays.toString(ns));
// [10, 23, 45, 67, 89]
}
}
对数组的排序,修改了数组本身的顺序
对字符串数组的排序,实际上修改的是引用(指向)的关系
1,多维数组的新建使用int[][]
类型
2,多维数组使用.length()
方法得到的长度和实际长度是不一样的,其本质是一维数组的嵌套
3,多维数组的打印使用Arrays.deepToString()
这个函数
import java.util.Arrays;
public class ArrayOperation {
public static void main(String[] args) {
// 多维数组
// 新建的时候需要注意返回类型是int[][]
int[][] new_ns = {
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 }
};
System.out.println(new_ns.length); //3
System.out.println(new_ns[0].length); //4
// 多维数组的打印输出使用deepToString这个函数
System.out.println(Arrays.deepToString(new_ns));
}
}
main函数是可以引入字符串变量的,通过不同的字符串变量可以得到不同的结果,例如查询版本号。
main函数的变量是在运行时候传递的,所以这里使用命令行进行编译运行。
使用Arrays.equals()
判断两个字符串是否相等
首先在终端中新建一个文件
touch ArrayArgs.java # 注意和public class后面的类名保持一致
open -e ArrayArgs.java
然后在里面填写下面的函数
public class ArrayArgs{
public static void main(String[] args){
System.out.println("test if is ok");
for (String arg:args){
if ("-version".equals(arg)){ // Array.equals()函数判断字符串是否相等
System.out.println("Version: v1.0");
break;
}// end if
}// end for
}// end main
}// end class
最后编译运行
javac ArrayArgs.java
java ArrayArgs.java -version
# 效果如下
test if is ok
Version: v1.0
参考文章
https://www.liaoxuefeng.com/wiki/1252599548343744/1255945064769408