尚学堂 JAVA DAY11 概念总结

1.冒泡排序算法 《升序排列》

思路1:
数组长度为n,那么要对数组进行n-1次遍历;

step 1---从数组的第一个数开始,两两比较,如果第一个数 > 第二个数,将二者进行交换;
之后拿第二个数与第三个数进行比较,若 第二个数 > 第三个数,将二者进行交换;
依此类推,直到 第n-2个数 和 第n-1个数比较完。

此时,该数组中最大的数将排在数组的最后一个位置。

step 2---重复step1,直到遍历完整个数组。

 1 public class NewArray {
 2     public static void main(String[] args) {
 3         //声明并定义一个无序的数组
 4         int[] scores = new int[15];
 5         for(int i = 0; i < scores.length; i++) {
 6             scores[i] = (int)(Math.random() * 101);
 7         } 
 8 
 9         //排序前 打印数组
10         System.out.println("\n==============排序前====================");
11         for(int score : scores) {
12             System.out.print(score + " ");
13         }
14 
15         //排序进行时 升序排列
16         int temp = 0;
17         int counter = 0;
18         for(int j = 0; j < scores.length - 1; j++) {
19             for(int i = 0; i < scores.length - 1; i++) {
20                 if(scores[i] > scores[i+1]) {
21                     temp = scores[i];
22                     scores[i] = scores[i+1];
23                     scores[i+1] = temp;
24                 }
25             }
26                 counter++;
27         }
28 
29         //排序后 打印数组
30         System.out.println("\n==============排序后====================");
31         for(int score : scores) {
32             System.out.print(score + " ");
33         }
34 
35         System.out.println("\n======================================");
36         System.out.println("共进行了" + counter + "次比较");
37     }
38 }

思路2:
数组长度为n,那么要对数组进行n-1次遍历;

step 1---从数组的第一个数开始,两两比较,交换,直到数组元素的(索引 == 数组长度 - 1 - 第i次)遍历数组结束。

step 2---重复step1,直到数组遍历结束。

public class NewArray {
    public static void main(String[] args) {
        //声明并定义一个无序的数组
        int[] scores = new int[15];
        for(int i = 0; i < scores.length; i++) {
            scores[i] = (int)(Math.random() * 101);
        } 

        //排序前 打印数组
        System.out.println("\n==============排序前====================");
        for(int score : scores) {
            System.out.print(score + " ");
        }

        //排序进行时 升序排列

        int temp = 0;
        int counter = 0;
        for(int j = 0; j < scores.length - 1; j++) {
            for(int i = 0; i < scores.length - 1 - j; i++) {
                if(scores[i] > scores[i+1]) {
                    temp = scores[i];
                    scores[i] = scores[i+1];
                    scores[i+1] = temp;
                }
            }
            counter++;
        }


        //排序后 打印数组
        System.out.println("\n==============排序后====================");
        for(int score : scores) {
            System.out.print(score + " ");
        }

        System.out.println("\n======================================");
        System.out.println("共进行了" + counter + "次比较");
    }
}
View Code

思路3:
数组长度为n,那么要对数组进行n-1次遍历;

step 1---从数组的第一个数开始,两两比较,交换,直到数组元素的(索引 == 数组长度 - 1 - 第i次)遍历数组结束。

step 2---重复step1,直到数组中没有发生元素的交换为止。

 1 public class NewArray {
 2     public static void main(String[] args) {
 3         //声明并定义一个无序的数组
 4         int[] scores = new int[15];
 5         for(int i = 0; i < scores.length; i++) {
 6             scores[i] = (int)(Math.random() * 101);
 7         } 
 8 
 9         //排序前 打印数组
10         System.out.println("\n==============排序前====================");
11         for(int score : scores) {
12             System.out.print(score + " ");
13         }
14 
15         //排序进行时 升序排列
16         int temp = 0;
17         int counter = 0;
18         boolean hasChanged = false;
19         for(int j = 0; j < scores.length - 1; j++) {
20             //每一次遍历开始都认为数列无序,数据未发生过交换
21             hasChanged = false;  
22             for(int i = 0; i < scores.length - 1 - j; i++) {
23                 if(scores[i] > scores[i+1]) {
24                     //只要发生了交换,标志位置为true,表示还需进行下一次比较
25                     hasChanged = true;
26                     temp = scores[i];
27                     scores[i] = scores[i+1];
28                     scores[i+1] = temp;
29                 }
30             }
31             counter++;
32             if(!hasChanged){
33                 break;
34             }
35         }
36 
37 
38         //排序后 打印数组
39         System.out.println("\n==============排序后====================");
40         for(int score : scores) {
41             System.out.print(score + " ");
42         }
43 
44         System.out.println("\n======================================");
45         System.out.println("共进行了" + counter + "次比较");
46     }
47 }
48 
49 2.方法的重载
50     一个类中可以存在 [方法名相同、功能相同、参数不同(形参类型、形参数量)的 多个方法]。 这叫方法的重载。
51     如:
52         Arrays.sort(int[] arr);
53         Arrays.sort(float[] arr);
54         Arrays.sort(byte[] arr);
55         Arrays.sort(double[] arr);
56         ...
57     顺便学习了Arrays类的使用,以及API文档的查阅
58 import java.util.Arrays;
59 
60 public class TestArraysClass {
61     public static void main(String[] args) {
62         //声明并定义一个无序的数组
63         int[] scores = new int[15];
64         for(int i = 0; i < scores.length; i++) {
65             scores[i] = (int)(Math.random() * 101);
66         } 
67 
68         //输出数组
69         System.out.println(Arrays.toString(scores));
70 
71         //将数组排序
72         Arrays.sort(scores);
73         
74         //输出数组
75         System.out.println(Arrays.toString(scores));
76 
77         //查询某个元素
78         System.out.println(Arrays.binarySearch(scores,4));
79 
80         //复制一个数组
81         int[] newScores = Arrays.copyOf(scores,0);
82 
83         //打印新数组
84         System.out.println(Arrays.toString(newScores));
85     
86     }
87 }

3.可变参数
1)格式:
方法头(类型 ... 参数变量名) {
方法实体
}
2)特点:(要背)
a.只能作为方法的形参;
b.JDK1.5之后提供;
c.可接受八种基本数据类型和数组类型数据;
d.可以接受0个、1个和多个实参;
e.可变参数只能是最后一个参数;
f.定义了可变参数的方法后,不可定义数组为形参的方法;
g.重载的方法包括可变参数 和 确定数量参数的方法时,会优先调用确定数量参数的方法,而
忽略可变参数的方法。

4.main方法如何接收实参?
格式:
java 类名 参数1 参数2 参数3...

5.二维数组
1) 声明格式:
类型[][] 数组名; 或
类型 数组名[][];
2) 分配空间:
new 类型[长度][长度]; ---将二维数组的第一维和第二维都分配空间,使这都有默认值。

new 类型[长度][];---仅给二维数组的第一维分配空间,其默认值为null;
3) 动态初始化
数组名[][] = ...;
4) 静态初始化
是将上述三步合而为一。
类型[][] 数组名 = new 类型[][]{{},{},{}...};

类型[][] 数组名 = {{},{},{}...};

 1 public class TwoDArray{
 2 
 3     public static void main(String[] args) {
 4         
 5         //int[][] scores = new int[][]{{80,90,78},{90,80},{0,70}};
 6         int[][] scores = {{80,90,78},{90,80},{0,70}};
 7 
 8         /*scores[0] = new int[4];
 9         scores[1] = new int[3];
10         scores[2] = new int[2];
11 
12         scores[0][0] = 80;
13         scores[0][1] = 79;
14         scores[0][2] = 78;
15 
16         scores[1][0] = 90;
17         scores[1][1] = 80;
18 
19         scores[2][1] = 70;    */
20 
21         for(int i = 0; i < scores.length; i++) {
22             for(int j = 0; j < scores[i].length; j++) {
23                 System.out.print(scores[i][j] + " ");
24             }
25             System.out.println();
26         }
27 
28     }
29 
30 }

 

posted @ 2016-07-14 20:09  一夏鸣蝉  阅读(160)  评论(0编辑  收藏  举报