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

——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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值