黑马程序员--基础整理02

来源:互联网 发布:python for quants 编辑:程序博客网 时间:2024/05/18 00:39

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
注:视频来源,毕向东老师的 JAVASE 基础视频。

语句

1.判断结构——if语句

三种格式:if;if else ; if elseif else。
if语句特点:
a,每一种格式都是单条语句。
b,第二种格式与三元运算符的区别:三元运算符运算完要有值出现。好处是:可以简化if else代码。
c,条件表达式无论写成什么样子,最终的结果不是true就是 false。

package fuxi;/** * 需求:根据用户指定月份,打印该月份所属季节。 *@author XiaLei */public class Day2Test1 {    public static void main(String[] args) {         int month = 4;        if(month>=1 && month<4){                  System.out.println("春季");              }else if(month>=4 && month<7){                  System.out.println("夏季");              }else if(month>=7 && month<10){                  System.out.println("秋季");              }else if(month>=10 && month<13){                  System.out.println("冬季");              }else{                  System.out.println("输入月份有误,程序结束。");              }    }}

2.选择结构——switch语句

switch语句特点:
a,switch语句选择的类型只有四种:byte,short,int, char。
(注意:升级版后又添加了枚举和字符串类型)
b,case之间与default没有顺序。先执行第一个case,没有匹配的case执行default。
c,结束switch语句的两种情况:1、遇到break结束;2、执行到switch结尾结束。
d,如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾结束。
if和switch语句很像。如果判断的具体数值不多,而且符合byte short int char这四种类型。虽然两个语句都可以使用,建议使用switch语句,因为效率稍高。其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。

 package fuxi;/** *  *@author XiaLei */public class Day2Test {    public static void main(String[] args) {        int x=3;        switch (x){        //swith在判断byte short int char 时效率较高,无法判断boolean型。            //case取值              //case 1:                  //执行语句                  //break;              //case 2:                  //执行语句                  //break;              //default:                  //执行语句                  //break;            case 2:                System.out.println("haha");                break;            case 12:                System.out.println("yes");                break;            default:                System.out.println("nono");                 }    }}   
package fuxi;/** * 需求:根据用户指定月份,打印该月份所属季节。 *@author XiaLei */public class Day2Test1 {    public static void main(String[] args) {        int x = 50;        switch(x){              case 1:              case 2:              case 3:                   System.out.println("春季");                  break;              case 4:              case 5:              case 6:                   System.out.println("夏季");                  break;            case 7:              case 8:              case 9:                   System.out.println("秋季");                  break;            case 10:              case 11:              case 12:                   System.out.println("冬季");                  break;               default:                  System.out.println("error");                  break;        }    }}

3.循环结构——while,do while,for语句

while练习

package fuxi;/** * while语句格式:   * while(条件表达式){   *      满足条件则无限循环。   * }   *   * do while语句格式:   * do{   *      执行语句。   * }while(条件表达式);   *   * for(){   *     * }  *@author XiaLei */public class Day3Test1 {    public static void main(String[] args) {        //求1加到100的和        int x = 0;        int sum = 0;        while(x<=100){            sum+=x;            x++;        }        System.out.println(sum);    }}

打印结果:
5050
dowhile练习

package fuxi;/** *  *@author XiaLei */public class Day3Test2 {    public static void main(String[] args) {        //do while  先执行循环体,再判断         int x = 0;        do{            System.out.println("x="+x++);        }        while(x<3);    }}

打印结果:
x=0
x=1
x=2
for练习

package fuxi;/** *  *@author XiaLei */public class day3Test {    public static void main(String[] args) {        // 打印1-10的和;        int n = 0;        for (int x=1; x<11;x++){            n+=x;        }        System.out.println(n);        // 获取1-100之间7的倍数的个数。        int m = 0;        for (int x = 1; x<101; x++){                        if (x%7==0)                m++;            }        System.out.println(m);        //打印九九乘法表。        for (int x = 1; x<10;x++){            //尖朝上,改变条件;            //尖朝下,改变初始化值。            for(int y=1;y<=x;y++){                System.out.print(x+"x"+y+"="+x*y+"\t");//制表符            }            System.out.println("");        }        //打印*型金字塔。            for (int x = 1;x<6;x++){                //外循环控制行数,内循环控制列数。                for (int y = x;y<5;y++){                    System.out.print(" ");                }                for (int z = 0;z<x;z++){                        System.out.print("* ");                }                System.out.println("");            }                       }}

打印结果:
55
14
1x1=1
2x1=2 2x2=4
3x1=3 3x2=6 3x3=9
4x1=4 4x2=8 4x3=12 4x4=16
5x1=5 5x2=10 5x3=15 5x4=20 5x5=25
6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36
7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49
8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64
9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81
这里写图片描述
注意:1.最简单无限循环格式:while(true){}, for(;;){}。
2.while与for可以互换,区别在于for为了循环而定义的变量在for循环结束就是在内存中释放。而while循环使用的变量在循环结束后还可以继续使用。

4.其他流程控制语句——break,continue

break(跳出)语句:应用范围:选择结构和循环结构。
continue(继续)语句:应用于循环结构。
注意:
a,这两个语句离开应用范围,存在是没有意义的。
b,这个两个语句单独存在时,下面都不可以有语句,因为执行不到。
c,continue语句是结束本次循环继续下次循环。
d,标号的出现,可以让这两个语句作用于指定的范围。只能用于循环结构。

函数

定义:定义在类中的具有特定功能的一段独立小程序。也称方法。

总结:
1. 定义函数可以将功能代码进行封装,便于对该功能进行复用。
2.函数只有被调用才会被执行。
3.函数的出现提高了代码的复用性。
4.对于函数没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写。

注意:
函数的重载只要参数个数或参数类型不同即可,与返回值类型无关。

数组

概念:
同一种类型数据的集合。简单的来说就是一容器,用来装东西的。
使用数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素。

练习1——求数组最大值,选择排序及冒泡排序。

package fuxi;/** * 堆栈使用  : * 栈内存:变量的数据在方法体里面使用完毕,会自动释放  。 * 堆内存:使用java的垃圾回收机制,  非手动操作,也不能马上回收。 * 堆内存中的值都有默认初始化值。 *@author XiaLei */public class day4Test1 {    public static void main(String[] args) {//      int[] arr = new int[3];//      System.out.println(arr[2]);//默认初始化值为0;        //给定数组{5,1,4,6,2,8,9},获取最值。        int[] arr = {5,1,4,6,2,8,9};        printArray(arr);        int max=5,min=5;        for (int x = 1;x<arr.length;x++){            if (min>arr[x]){                min = arr[x];            }        }        for (int x = 1;x<arr.length;x++){            if (max < arr[x]){                max = arr[x];            }        }        System.out.println("最大值="+max+"   最小值="+min);           //选择排序。//      for (int x = 0;x<arr.length-1;x++){//          //          for (int y = x+1;y<arr.length;y++){//              //              if (arr[x]>arr[y]){             //换位操作//                  int temp = arr[y];//                  arr[y] = arr[x];//                  arr[x] = temp;//              }//          }//      }//      printArray(arr);        //冒泡排序。相对于选择排序,冒泡排序由于调用堆内存较少,效率较高。        for (int x = 0;x<arr.length-1;x++){            for (int y = 0;y<arr.length-x-1;y++){                if (arr[y]>arr[y+1]){                    int temp = arr[y];                    arr[y] = arr[y+1];                    arr[y+1] = temp;                }            }        }        printArray(arr);            }    public static void printArray(int[] arr){//打印数组        System.out.print("[");        for (int x = 0;x<arr.length;x++){            if (x!=arr.length-1)                System.out.print(arr[x]+",");            else                System.out.println(arr[x]+"]");         }    }}

打印结果:
[5,1,4,6,2,8,9]
最大值=9 最小值=1
[1,2,4,5,6,8,9]

练习2——数组的折半查找

package fuxi;/** *  *@author XiaLei */public class day4Test2 {    public static void main(String[] args) {        int[] arr = {1,3,4,5,6,9};        System.out.println(halfSearch_2(arr,5));    }    public static int halfSearch_1(int[] arr,int key){        //折半查找方法1 。 必须保证该数组是有序的数组         //key为对比的数值          int max=arr.length-1,min=0,mid=(max+min)/2;        while(arr[mid]!=key){            if(arr[mid]>key)                max=mid-1;            else if(arr[mid]<key)                min=mid+1;            if(min>max)                return -1;            mid=(max+min)/2;        }        return mid;    }    public static int halfSearch_2(int[] arr,int key){        //折半查找方法2,相较于1要简单,这里注意else if的使用,如果没有else if则第一个条件没满足直接跳到else执行。        int max=arr.length-1,min=0,mid;        while(min<=max){            mid=(max+min)>>1;            if(arr[mid]>key)                max=mid-1;            else if(arr[mid]<key)                min=mid+1;            else                return mid;        }        return -1;//这里如果返回 min则可以实现知道插入元素位置的功能。    }}

打印结果:
3

练习3——查表法定义进制通解

package fuxi;/** *  *@author XiaLei */public class day4Test3 {    public static void main(String[] args) {        toHex(60);        trans(60,15,4);        trans(6,1,1);        trans(9,7,3);    }    public static void toHex(int x){        //自定义一个字符数组        char[] arr = {'0','1','2','3','4','5','6','7',                     '8','9','a','b','c','d','e','f'};          char[] ch= new char[8];        int pos = ch.length;        while(x!=0){            int temp = x&15;            ch[--pos] = arr[temp];            x=x>>>4;        }        System.out.println("pos="+pos);        for (int y=pos;y<ch.length;y++){            System.out.print(ch[y]+",");        }    }    public static void trans(int num,int base,int offset){//进制转换通法。        char[] arr = {'0','1','2','3','4','5','6','7',                 '8','9','a','b','c','d','e','f'};           //定义一个临时容器        char[] ch= new char[8];         //定义一个操作数组的指针         int pos = ch.length;        //利用与低位最大值的方式取出低位,存到临时数组中          while(num!=0){            int temp = num&base;//base为基数            ch[--pos] = arr[temp];            num=num>>>offset;//offset为右移位数        }        for (int x=pos;x<ch.length;x++){            System.out.print(ch[x]+",");        }    }}

二维数组的概念:
int[][] arr = new int[3][2];
表示有3个一维数组,每个一维数组中有2个元素。
给第一个一维数组1角标赋值66的操作:arr[0][1] = 66;

0 0
原创粉丝点击