Java基础--第十四天

时间:2022-10-02 15:38:02

Java基础--第十四天

讲课流程:【API应用】--编译器提醒

         1,Arrays类【冒泡排序、选择排序】

                   冒泡排序:

                            原理:相邻元素两两比较,大的往后走;一次完成,大的沉底。

                            代码实现--字符串字母排序

                            实现步骤:

                                     A:两个相邻位置数据进行比较,大的沉底;if(arr[i]>arr[i+1])  交换位置

                                     B:数组元素进行第一次全比较:for(int i=0;i<arr.length-1;i++)

                                     C:全部数据进行比较:for(int i=0;i<arr.length-1;i++)套在最外层---需要优化第二步

                                     D:for(intj=0;j<arr.length-1-i;j++)

                                               -1:防止越界;-i:每一轮比较后,元素变少

                                     E:组合代码

                   二分查找:

                            乱序查找,可以直接一一对比;

                            二分查找前提:查找数据数组有序

                            步骤:

                                     A:把查找的值与中间位置元素比较,相同,则返回;不相同,则比较大小;

                                     B:若是小,则比较前半部;若大,则判断后半部。

 1 package cn.itcast_01;
 2 /**
 3  * 冒泡排序
 4  * @author itcast
 5  *
 6  */
 7 public class BubbleSort {
 8     public static void main(String[] args) {
 9         int[] arr = {8,9,2,3,1,4,5,6,7,0};
10         //排序前打印
11         printArr(arr);
12         //冒泡排序
13         bubbleSort(arr);
14         //排序后打印
15         printArr(arr);
16     }
17     /**
18      * 冒泡排序
19      * @param arr 排序的对应数组
20      */
21     public static void bubbleSort(int[] arr){
22         /*    1,进行相邻两个位置数据比较,大的往后沉;
23          *     2,进行一轮比较,将最大值沉到最后
24          *     3,继续下一轮比较,此轮最后的值不用再参与比较,如此循环,直至排序完成
25          * */
26         for (int i = 0; i < arr.length-1; i++) {
27             for (int j = 0; j < arr.length-1-i; j++) {
28                 //-1:防止越界;-i:每一轮比较完成后,减少一次比较
29                 if(arr[j]>arr[j+1])
30                     changeLocation(arr,j,j+1);
31             }
32         }
33     }
34     /**
35      * 打印数组
36      * @param arr    传入要打印的数组
37      */
38     public static void printArr(int[] arr){
39         for (int i = 0; i < arr.length; i++) {
40             System.out.print(arr[i]+"\t");
41         }
42         System.out.println();
43     }
44     /**
45      * 交换两个元素的位置
46      * @param arr    数组
47      * @param i        交换数值的第一个索引值
48      * @param j        交换数值的第二个索引值
49      */
50     private static void changeLocation(int[] arr,int i,int j){
51         int temp = arr[i];
52         arr[i] = arr[j];
53         arr[j] = temp;
54     }
55 }

 

                   Arrarys类:

                            构造方法

                            toString():将任意数组类转换成String类型

                            binarySearch():二分查找

 1 package cn.itcast_01;
 2 
 3 public class HalfSearch {
 4     public static void main(String[] args) {
 5 
 6     }
 7 
 8     public static int halfSearch(int[] arr, int search) {
 9         //二分查找应该先排好序
10         //数组打印并排序
11         BubbleSort.printArr(arr);
12         BubbleSort.bubbleSort(arr);
13         BubbleSort.printArr(arr);
14         //查找核心代码
15         int start = 0;
16         int end = arr.length - 1;
17         int mid = (start + end) / 2;
18         while (start<=end) {
19             if (arr[mid] > search) {
20                 end = mid - 1;
21             } else if (arr[mid] < search) {
22                 start = mid + 1;
23             } else if (arr[mid] == search) {
24                 return mid;
25             }
26             mid = (start + end) / 2;
27         }
28         return mid;
29     }
30 }

 

         2,System类

                   构造方法

                   成员方法

                            exit():终止当前运行的虚拟机

                            currentTimeMillis():返回以毫秒为单位的当前时间

                            arraryCopy():复制数组

                            static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)                         

                                     复制的长度,比目标数组替换位置后的长度长,怎么办?

                                               复制的长度不能超过目标数组后面剩的长度

         3,StringBuffer类【字符串缓冲区类】

                   与String的区别:

                            String数组存在常量池里面;一旦赋值,值不能发生改变

                            StringBuffer则可以改变,采用的是缓冲区机制【随数据增多,可以继续开辟内存空间【同一个对象】】

                   构造方法

                            StringBuffer()

                            StringBuffer(int capacity)//capacity是一个默认长度,给定值比默认值小时,也是默认值

                            StringBuffer(String str)

                                     String和StringBuffer的转换:可以通过构造方法实现

                   方法

                            length()      //实际长度

                            capacity()    //理论长度

                            添加功能

                                     append()     //追加元素,数据额类型可混合,可链式编程

                                     insert()       //在指定位置添加元素

                            删除功能

                                     deleteCharAt() 删除指定位置字符

                                     delete() 删除指定位置到指定位置的字符

                                               包左不包右【约定成俗】

                            StringBuffer replace(int start, int end, String str)把开始到结束位置的字符用一个新的字符串给替换。

                            String substring(int start):从指定位置到末尾截取

                           String substring(int start, int end): 从指定位置到结束位置截取

                            StringBuffer reverse()将此字符序列用其反转形式取代

                   实例:String 字符串翻转打出,两个例子,进行区别

                            常量相加会直接累加,然后在常来池里去找有没有,有则就是常量池里的值。

                            变量相加会重新开辟空间。        

                            String是一种特殊的引用类型,他传的值是变量的值。

         4,Integer类:

                   范围最大最小值

                   方法:二进制,八进制,十六进制【进制转换】

                   构造方法:

                            byte             Byte

                            short                 Short

                            int                 Integer

                            long             Long

                            float             Float

                            double               Double

                            char             Character

                            boolean             Boolean

                            Interger(int value);

                            Integer(String s);  NumberFormatException:数据格式化异常,此处字符串必须是数字字符组成的字符串

                            int---String:1,加空格符;2,String.valueOf();3,Integer做桥梁integer.toString();

                            String--int:1,"100",integer做桥梁;2,int num = Integer.parseInt(String str);

 

                   JDK1.5新特性

                            自动装箱:直接把基本类型赋值给引用类型

                            自动拆箱:直接把引用类型赋值给基本类型

                            Integer ii = 100;

                            ii = ii+200;  ii = new Integer(ii.intValue()+200);

                            开发原则:只要是对象,就先做不为null判断。

                   byte常量池

                            byte常量池。

                            在byte范围内的值,直接赋值给Integer,是从byte常量池里获取。

 1 package cn.itcast_05;
 2 
 3 import java.util.Arrays;
 4 
 5 /**
 6  * 
 7  * 一个字符串“23 98 71 54 60”(数字之间通过空格分隔,并且是没有大小顺序的),设计一个功能,把这个字符串排序后变成如下字符串:"23 54 60 71 98"
 8 1、先把字符串转成字符数组。(是不是已经拿到了里边所有的数值(字符串类型的))
 9 2、把字符数组转成int类型的数组。
10 3、对int数组进行排序。
11 4、把int类型的数组转变成字符串。
12  *
13  */
14 public class IntegerDemo {
15     public static void main(String[] args) {
16         String s = "23 98 71 54 60";
17         //先把字符串转成字符数组。(是不是已经拿到了里边所有的数值(字符串类型的)
18         String[] strArr = s.split(" ");
19         //把字符数组转成int类型的数组
20         int[] arr = new int[strArr.length];
21         for (int i = 0; i < arr.length; i++) {
22             arr[i] = Integer.parseInt(strArr[i]);
23         }
24         //对int数组进行排序
25         Arrays.sort(arr);
26         //把int类型的数组转变成字符串
27         StringBuffer sb = new StringBuffer();
28         for (int i = 0; i < arr.length; i++) {
29             sb.append(arr[i]).append(" ");
30         }
31         //提出最后一个空格
32         String s1 = sb.toString().trim();
33         System.out.println(s1);
34 
35     }
36 }

 

 

         常用API方法

1:Object(重点)

         toString():为了让对象的显示有意义,一般重写该方法。

         equals():默认比较的是地址值,一般重写该方法,按照自己的需求。

2:Math

         floor():小于等于参数的最大整数。

         ceil():大于等于参数的最小整数。

         round():四舍五入。+0.5

         random():随机数。[0.0,1.0)

         pow():x的y次方

         sqrt():平方根  素数问题。

3:Random

         nextInt(int n):随机产生[0,n)

4:Scanner

         nextInt():获取int类型

         nextLine():获取String类型

5:String(重点)

6:StringBuffer(重点)

         append():添加

         insert():在指定位置添加

         reverse():反转

7:System

         exit():退出

8:Arrays

         sort():排序

         binarySearch():二分查找

9:Integer(重点)

         parseInt(String s):把String -- int