A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xiaolongwang 中级黑马   /  2015-11-28 11:24  /  3488 人查看  /  29 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文

JAVA语言基础案例总结

1.类型提升问题
        byte b1 = 3;
        byte b2 = 4;
        byte b3 = b1 + b2;                //编译错误
        byte b4 = 3 + 4;                //编译正确
        解释:(1)变量相加,首先首先进行类型提升,之后再进行计算,计算后将结果赋值;
                  (2)常量相加,首先进行计算,之后判断是否在接受类型的范围,在则赋值。

2.类型强制转换溢出结果计算
        A:byte b = (byte)300;
          a: 300的二进制int类型表示
                 00000000 00000000 00000001 00101100
          b: 截断为byte类型(强转)
                 00101100
                 符号位                数值位
                 0                        0101100
          c: 转为十进制数(正数原、反、补码相同)
                                符号位                数值位
                 补码        0                        0101100
                 反码        0                        0101100
                 原码        0                        0101100
                 十进制数为: 44
                 
        B:        byte b = (byte)130;
          a: 130的二进制int类型表示
                 00000000 00000000 00000000 10000010
          b: 截断为byte类型(强转)
                 10000010
                 符号位                数值位
                 1                        0000010
          c: 转为十进制数
                                符号位                数值位
                 补码        1                        0000010
                 反码        1                        0000001
                 原码        1                        1111110
                 十进制数为: -126
                 
3.扩展赋值运算符隐含强制类型转换问题
        判断下列代码是否有误,并指出错误
        short s = 1;
        s = s + 1;                //错误,s在参加运算时会自动提示类型为int
                                        //        int类型值无法直接赋值于short类型
       
        short z = 1;
        z += 1;                //正确,扩展赋值运算符包含强制类型转换
                                //等价于 z = (short)(z + 1);
                               
4.位异或实现两变量交换值
        int a = 10;
        int b = 20;
       
        a = a ^ b;
        b = a ^ b;        //b = a ^ b ^ b = a;
        a = a ^ b;        //a = a ^ b ^ a = b;
               
5.左移、右移、无符号右移的计算(针对二进制数的操作)
        << :左移,左边最高位丢弃,右边补齐0;
        >> :右移,最高位是0,左边补齐0,最高位是1,左边补齐1;
        >>> :无符号右移 无论最高位是0或1,左边补齐0.
        a: -24 << 2
                -24的二进制数为:10000000 00000000 00000000 00011000
                反码:                         11111111  11111111 11111111 11100111
                补码:           11111111  11111111 11111111 11101000   
                左移:                 (11)111111  11111111 11111111 1110100000
                反码:                         11111111 11111111 11111111 10011111
                原码:                         10000000 00000000 00000000 01100000
                十进制为: -96
        b: -24 >> 2
                -24的二进制数为:10000000 00000000 00000000 00011000
                反码:                         11111111  11111111 11111111 11100111
                补码:           11111111  11111111 11111111 11101000   
                右移:                     1111111111  11111111 11111111 111010(00)
                反码:                         11111111 11111111 11111111 11111001
                原码:                         10000000 00000000 00000000 00000110
                十进制数为: -6
        c: -24 >>> 2
                -24的二进制数为:10000000 00000000 00000000 00011000
                反码:                         11111111 11111111 11111111 11100111
                补码:           11111111  11111111 11111111 11101000   
                无符右移:             0011111111  11111111 11111111 111010(00)
                原码:                         00111111  11111111 11111111 11111010
                十进制数为: 1073741818
               
6.if语句和switch语句的应用场景
        A: if
                针对boolean类型的判断
                针对一个范围的判断
                针对几个常量的判断
        B: switch
                针对几个常量的判断
               
7.switch知识,看程序写结果(没有break,会发生case穿透现象)
        A: int x = 2;
           int y = 3;
           switch(x){
                        default:        //3.执行
                                y++;        //4.y = 4
                                break;        //5.停止
                        case 3:                //1.不执行
                                y++;               
                        case 4:                //2.不执行
                                y++
           }
           System.out.println(y);                //y = 4
        B:  int a = 2;
                int b = 3;
                switch(a){
                        default:                //3.执行
                                b++;                //4.b = 4
                        case 3:                        //1.不执行    5.没有break,case穿透,继续执行
                                b++;                                        //6.b = 5
                        case 4:                        //2.不执行    7.没有break,case穿透,继续执行
                                b++;                                        //8.b = 6
                }
                System.out.println(b)                //b = 6
       
8.switch语句的表达式可以是byte吗?可以是long吗?可以是String吗?
        switch语句的表达式可以是:byte,short,int,char
                                                                JDK5之后可以是枚举
                                                                JDK7以后可以是String
        答案:可以,不可以,JDK7以后可以
       
9.for循环打印阶乘问题
        结果:  1!=1
                        1!+2!=3
                        1!+2!+3!=9
                        1!+2!+3!+4!=33
                        1!+2!+3!+4!+5!=153
        代码:  int a = 1;
                        int b = 0;
                        String str = null;
                        for(int i=1;i<=5;i++){
                                a *= i;
                                b += a;               
                                if(a==1){
                                        str = a + "!";
                                }else{
                                        str = str+"+"+i+"!";                               
                                }                       
                        System.out.println(str+"="+b);       
                        }
10.while循环小芳存钱问题
        问题:小芳的妈妈每天给她2.5元钱,她都会存起来,但是,每当这一天是存钱的第5天或者5的倍数的话,
                  她都会花去6元钱,请问,经过多少天,小芳才可以存到100元钱。
        代码:  double sum = 0;
                        int count = 1;
                        while (true){
                                sum += 2.5;
                                if(sum >= 100){
                                        System.out.println("存100共用天数为:"+count);
                                        break;
                                }
                                if(count%5 == 0){
                                        sum -= 6;
                                }
                                count ++;
                        }
               
11.控制跳转语句问题
        A:        break:中断
                        用在循环和switch语句中,可跳出单层循环,配合标签语句可跳出多层循环
        B:        continue:继续
                        跳出单层循环的一次,循环可继续执行
        C:        return:返回
                        结束方法,遇到return,程序将不再继续往后执行
        练习:补全代码
                        for(int i = 1;i <= 10;i++){
                                if(1%3 == 0){
                                        //填写代码
                                }
                                System.out.println("hello");
                        }
                如何在控制台输出2次:hello
                        break;
                如何在控制台输出7次:hello
                        continue;
                如何在控制台输出13次:hello
                        System.out.println("hello");

12.嵌套for循环问题
        打印九九乘法表
        for (int x = 1; x <= 9; x++) {
                        for (int y = 1; y <= x; y++) {
                                int mul = y * x;
                                System.out.print(y + "*" + x + "=" + mul + "\t");
                        }
                        System.out.println();
                }
               
13.数组的遍历
        System.out.println("[");
        for(int x = 0; x < arr.length; x++){
                if(x == arr.length - 1){
                        System.out.println(arr[x] + "]");
                }else{
                        System.out.println(arr[x] + ", ");
                }
        }
14.求数组中的最大值
        int max = arr[0];
        for(int x = 0; x < arr.length; x++){
                if(arr[x] > max){
                        max = arr[x];
                }
        }
        return max;

15.求数组中的最小值
        int min = arr[0];
        for(int x = 0; x < arr.length; x++){
                if(arr[x] < min){
                        min = arr[x];
                }
        }
        return min;
       
16.逆序
        方式一:
        for(int x = 0;x < arr.length/2; x++){
                int temp = arr[x];
                arr[x] = arr[arr.length - 1 -x];
                arr[arr.length -1 -x] = temp;
        }
        方式二:
        for(int start = 0,end = arr.length - 1;start <= end; start++,end--){
                int temp = arr[start];
                arr[start] = arr[end];
                arr[end] = temp;
        }

17.查找
        方式一:
        public static int getIndex(int[] arr,int value){
                for(int x = 0; x < arr.length; x++){
                        if(arr[x] == value){
                                return x;
                        }
                }
                return -1;
        }
        方式二:
        public static int getIndex(int[] arr,int value){
                int index = -1;
                for(int x = 0;x < arr.length; x++){
                        if(arr[x] == value){
                                index = x;
                                break;
                        }
                }
                return index;
        }

18.二维数组遍历
        public static void printArray(int[][] arr){
                for(int x = 0; x < arr.length; x++){
                        for(int y = 0; y < arr[x].length; y++){
                                System.out.print(arr[x][y] + " ")
                        }
                        System.out.println();
                }
        }

19.二维数组求和
        public static int sumArray(int[][] arr){
                int sum = 0;
                for(int x = 0; x < arr.length; x++){
                        for(int y = 0; y < arr[x].length; y++){
                                sum += arr[x][y];
                        }
                }
                return sum;
        }
20.杨辉三角问题
        1
        1 1       
        1 2 1
        1 3 3 1
        1 4 6 4 1
        1 5 10 10 5 1
        ...
        //创建二维数组
        int[][] arr = new int[n][n];
        //为第一列和第x行的第x列赋值为1
        for(int x = 0; x < arr.length; x++){
                arr[x][0] = 1;
                arr[x][x] = 1;
        }
        //从第三行开始,为其他列赋值
        for(int x = 2; x < arr.length; x++){
                for(int y = 1; y < x-1; y++){
                        arr[x][y] = arr[x-1][y-1] + arr[x-1][y];
                }
        }
        //遍历二维数组(注意:y的循环范围,对照乘法表)
        for(int x = 0; x < arr.length; x++){
                for(int y = 0; y < x; y++){
                        System.out.print(arr[x][y]+"\t");
                }
                System.out.println();
        }

29 个回复

倒序浏览
互相加油顶~
回复 使用道具 举报
总结的不错啊
要继续保持啊
回复 使用道具 举报
继续加油哦!
回复 使用道具 举报
把学过了的都瞅了一遍
回复 使用道具 举报
历历在目啊,加油加油
回复 使用道具 举报
yubail 来自手机 中级黑马 2015-11-29 23:35:36
7#
谢谢分享
回复 使用道具 举报
很久之前的了.  好好学习哦!
回复 使用道具 举报
Kalsifa 来自手机 中级黑马 2015-11-30 00:00:52
9#
不错,很全面
回复 使用道具 举报
小鹿 中级黑马 2015-11-30 20:38:53
10#
八错! 八错!
回复 使用道具 举报
继续加油哦!
回复 使用道具 举报
总结得很好,总结是对过去学习的一种温习,加油,兄弟。
回复 使用道具 举报
Kalsifa 来自手机 中级黑马 2015-12-1 09:25:25
13#
加油加油
回复 使用道具 举报
很不错 表示没有这样子总结,你这个弄的很不错呀  
回复 使用道具 举报
我们发贴的目的,是自己对学习的一个总结,,希望 会时不时的来看一下,这样理解,以及记忆的会更深刻,,学习就是在不断的重复,日复一日,积少成多,希望每天 都坚持
回复 使用道具 举报
看起来很用心,一起加油
回复 使用道具 举报
我也剛學到這,感謝分享
回复 使用道具 举报
多做多练
回复 使用道具 举报
反码,补码,原码
回复 使用道具 举报
总结的不错
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马