回顾
一、理解数组
二、一维数组
1.声明和内存分配
2.元素的表示方法
3.数组元素的赋值
4.数组应用范例
三、二维数组
1.声明与分配内存
2.引用及访问
四、多维数组
学习小结
点拨
1.Java中的null使用
变量通常原则:先定义,并初始化后,然后再使用。在无法给予明确值时可以给null,但不能赋给基本类型变量(如int、float、double等)
int a = null; // 错误
Object a = null; // 正确
2.数组的下标
数组的下标从0开始,下标不能超过(length-1)。
实战练习
1.对int[] a = {25,24,12,76,98,101,90,28}数组进行排序,用冒泡法排序实现。
public class P180_8_6_1 {
public static void main(String[] args) {
int[] a = { 25, 24, 12, 76, 98, 101, 90, 28 };
System.out.println("排序前数组a的元素为:");
for (int i = 0; i < a.length; i++) {
System.out.print("a[" + i + "] = " + a[i] + "\t");
}
int b = 0, n = 0;
// 冒泡法,两两比较
for (int i = a.length - 1; i > 0; i--) {
for (int j = 0; j < i; j++) {
if (a[j] > a[j + 1]) { // 小的放后面
b = a[j];
a[j] = a[j+1];
a[j + 1] = b;
n += 1;
}
}
}
System.out.println("\n排序后数组a的元素为:");
for (int i = 0; i < a.length; i++) {
System.out.print("a[" + i + "] = " + a[i] + "\t");
}
System.out.println("\n交换" + n + "次!");
}
}
运行结果:
运行时把/t改成了空格,要不然截不了那么长图呀。
2.对上述冒泡算法改成乱序算法。
public class P180_8_6_2 {
public static void main(String[] args) {
int[] a = { 25, 24, 12, 76, 98, 101, 90, 28 };
System.out.println("排序前数组a的元素为:");
for (int i = 0; i < a.length; i++) {
System.out.print("a[" + i + "] = " + a[i] + "\t");
}
Random rand = new Random();
// 随机下标,两两交换
for (int i = 0; i < a.length; i++) {
int j = rand.nextInt(a.length);
int k = rand.nextInt(a.length);
int temp = a[j];
a[j] = a[k];
a[k] = temp;
}
System.out.println("\n排序后数组a的元素为:");
for (int i = 0; i < a.length; i++) {
System.out.print("a[" + i + "] = " + a[i] + "\t");
}
}
}
运行结果:
思考
我去,一下就上升到算法了,感觉难起来了,我要好好思考思考。冒泡算法,看了很多种算法,头都大了。但是冒泡算法还是最基本的排序法,其他排序法弄不清时就用这个冒泡法肯定能解决问题。冒泡基本算法算是啃下来了,在网上看到一个优化版本,也得看看。明天搞类和对象的基本概念。
public class ArrayTest {
public static void main(String[] args) {
// 优化冒泡
int[] a = { 25, 24, 12, 76, 98, 101, 90, 28 };
System.out.println(Arrays.toString(a));
Boolean bl; // 交换标志
int count = 0; // 计数
for (int i = 0; i < a.length - 1; i++) { // 最多做a.length-1趟排序
bl = false; // 本趟排序开始前,交换标志应为假
// 对当前无序区a[i..a.length-1]自下向上扫描
for (int j = 0; j < a.length - 1 - i; j++) {
if (a[j] > a[j + 1]) {// 交换
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
count += 1;
bl = true; // 发生了交换,故将交换标志置为真
}
if (!bl) // 本趟排序未发生交换,提前终止算法
break;
}
}
System.out.println("交换" + count + "次排序后:");
System.out.println(Arrays.toString(a));
}
}
运行结果:
注意交换次数。
记于2017年7月3日与5日夜