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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

位运算符

左移<<
乘以2的次幂运算,移几位就是几次幂

右移>>
除以2的次幂运算,移几位就是几次幂
右移时,原最高位是什么,空位就补什么

无符号右移>>>>
无论原最高位是什么,空位都补零。
比如在八进制、十六进制时

与运算符&
可用于获取二进制中的有效位1
比如:XXXXXXXX&00000111=XXXXXXXX的后三位

或运算|
6|3=110|011=111=7

异或^(记住它的技巧性)
6^ 3=110^011=101=5
6^ 3^3=6;
6^ 3^6=3;
一个数A连续^同一个数B,还是原来的数字A

按位取反~(易错)
~6 = ~ 0000 0110=11111001因为计算机中负数要储存其补码
11111001—取反10000110—加10000111=-7

补充:
对于正数来说,其二进制原码,反码,补码均为相同的,为原码的形式;
对于负数来说,其反码为符号位保持不变,其余各位取反,其补码为符号位保持不变,其余各位取反后再在最后一位上加1

练习

1.用最效率的方法算出2乘以8
解:通过位运算完成

public class myclass {
        public static void main(String[] args) {
                System.out.println(2<<3);               
        }
}
1
2
3
4
5
2.对两个整数变量的值进行互换,不需要第三方变量

//通过和的形式,有个弊端,两个数据较大,可能会超出int的范围
             a=a+b;//a=3+7=10
                b=a-b;//b=3+7-7=3
                a=a-b;//a=10-3=7
                System.out.println("a="+a+";b="+b);
1
2
3
4
5
或者

//用异或
a=a^ b;//a=3^7;
                b=a^ b;//b=3^ 7^7=3
                a=a^ b;//a=3^ 7^3=7
                System.out.println("a="+a+";b="+b);
1
2
3
4
5
三元运算符
(条件表达式)?表达式1:表达式2
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2.

练习:
需求:三个数,想知道最大的哪个?
自己做的答案:

        int a=3,b=5,c=10;
                int max;
                max=a>b?a:b;
                max=max>c?max:c;
                System.out.println("max="+max);
1
2
3
4
5
程序流程控制

顺序结构

从头到尾执行

判断结构

if(条件表达式){
执行语句
}
1
2
3
if(条件表达式){
执行语句;
}
else{
执行语句;
}//和三元运算符很像。理解为三元运算符是if else的简写格式
//区别不是所有的if else都能简化,因为三元运算符运算完必须有结果!
1
2
3
4
5
6
7
if(条件表达式){
执行语句;
}
else if(条件表达式){
执行语句;
}
else{
执行语句;
}//单条语句。else表示上面的条件 不满足
1
2
3
4
5
6
7
8
9
注意:执行语句为单条时,可以省略括号,多条时不可省。

练习:
需求:根据用户的给定的数值,显示该数值对应的星期,如:2,星期二。
思路:
1.怎么获取这个数值?来源有很多,不确定,只要是不确定的数据,都用变量存储,只要操作该变量即可。
2.数值不确定,如何显示对应的星期?那就需要对该数值进行判断。
3.怎么显示?通过输出语句就可以显示在屏幕上。

步骤
1.定义变量,记录数据
2.通过判断结构语句if对该变量进行判断
3.根据不同条件,通过输出语句显示不同的结果

int week=3;
if(week==1)
       System.out.println("星期一")
else if(week==2)
       System.out.println("星期二")
else if(week==3)
       System.out.println("星期三")
else if(week==4)
       System.out.println("星期四")
else if(week==5)
       System.out.println("星期五")
else if(week==6)
       System.out.println("星期六")
else if(week==7)
       System.out.println("星期日")
else
      System.out.println("没有对应的星期")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
选择结构

switch语句

switch(表达式)
{
  case   取值1;
  执行语句;
  break;
  case   取值2;
  执行语句;
  break;
  ……
  default;
  执行语句;
  break;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
特点:
1.答案的书写没有顺序;
2.匹配的答案被执行,一直执行到break结束或者执行到switch语句结束.
3.表达式只支持byte、short、int、char,5.0增enum, 7.0增加string.
上面的练习题用switch来做:
switch和if的区别:
1.if可以用于判断数值,也可以判断区间,只要运算结果是boolean类型,都可以进行判断。
2.switch用于对固定几个值,进行判断。判断的值得类型有限。

int week=3;
                switch(week) {
                case 1:
                        System.out.println("星期一");
                    break;
                case 2:
                        System.out.println("星期二");
                    break;
                case 3:
                        System.out.println("星期三");
                    break;
                case 4:
                        System.out.println("星期四");
                    break;
                case 5:
                        System.out.println("星期五");
                    break;
                case 6:
                        System.out.println("星期六");
                    break;
                case 7:
                        System.out.println("星期日");
                    break;
                default:
                        System.out.println("没有对应的星期");
                    break;
                }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
循环结构

代表语句:while,do while,for
当对某些语句需要执行很多次时,就是用循环网络。

while

while(条件表达式)//如果这里加;,那么结果一直会运不出来,程序会反复问自己,是否一直是这个条件。
{
执行语句;
}
1
2
3
4
练习
需求1:1—10

int i=1;
                while(i<=10) {
                        System.out.println(i);
                        i++;
1
2
3
4
需求2:运算1-10的和
思路:
1+2+3+……
每次重复的都是和+下一个数。
和是确定的么?不确定,需要变量。
下一个数是确定的么?不确定,需要变量。
和+下一个数在重复,说明需要执行多次,用循环。
下一个数是有规律的,自增。
步骤:
1.定义变量,一个记录和,另一个记录下一个数;
2.需要循环结构;
3.循环中需要进行和+下一个数的运算,并让下一个数自增。

int i=1,sum=0;
                while(i<=10) {
                        sum+=i;
                        i++;
                }
                System.out.println("sum="sum);
1
2
3
4
5
6
do while

do
{
执行语句;
}while(条件表达式);
1
2
3
4
do while特点:无论条件是否满足,循环体至少执行一次。

for

for(初始化表达式;循环条件表达式;循环后的操作表达式){
执行语句;(循环体)
}
1
2
3
for和while的区别
for中定义的循环变量只对循环体有效,除了循环体,变量相当于没有定义。
如果定义的变量仅仅只为循环而存在,建议用for;如果全局都需要,用while.

可能会放一个无限循环用来放缓冲时间,直到触发跳出条件。

//最简单的无限循环;
while(true){ }
for(; ;){ }//for循环不写条件,默认是真
1
2
3
练习
需求:获取1-100之间6的倍数的个数。
思路:
1.个数是未知的,所以定义变量。
2.6的倍数怎么表示?只要是对6能整除,也就是没有余数。
3.需要对1-100之间所有的数都要进行判断是不是6的倍数。如果是,需要对个数变量进行自增。
4.怎么完成1-1001之间呢?使用循环。
步骤:
1.定义变量,记录个数。记录1-100变化的数。
2.定义循环,遍历1-100.
3.在循环中对1-100的数字进行判断。
4.满足条件,个数变量自增。

int count=0;
                for(int i=1;i<=100;i++) {
                       
                        if(i%6==0)
                                count++;
                }
                System.out.println(count);
1
2
3
4
5
6
7
for嵌套语句

外循环控制的是行数
内循环控制的是列数

for(int i=0;i<3;i++) {
                        for(int j=0;j<4;j++) {                               
                                System.out.print("*");                       
                        }
                        System.out.println();//换行                               
                }
1
2
3
4
5
6
结果:

****
****
****
1
2
3
练习
需求:在屏幕中显示以下图形

*****
****
***
**
*
1
2
3
4
5
思路:
1.看其图形,是由5行组成的,
2.每一行都有多个∗ *∗
3.多行,循环就可以搞定,每到一行,里面有多个∗ *∗。循环内,还需要循环负责每一行的星的个数。
4.外循环控制行数,内循环控制每一行的个数
步骤:
1.for的嵌套循环

        for(int i=0,m=5;i<5;i++) {                       
                        for(int j=0;j<m;j++) {                               
                                System.out.print("*");                                                               
                        }                       
                        m--;
                        System.out.println();
                }
1
2
3
4
5
6
7


        for(int i=0;i<5;i++) {                       
                        for(int j=i;j<5;j++) {                               
                                System.out.print("*");                                                               
                        }                                       
                        System.out.println();
                }
1
2
3
4
5
6
需求
在屏幕中显示以下图形

*
**
***
*****
******
1
2
3
4
5
        for(int i=0;i<5;i++) {                       
                        for(int j=5;j>i;j--) {                               
                                System.out.print("*");                                                               
                        }                                       
                        System.out.println();
                }
1
2
3
4
5
6
break(跳出)

break适用范围:switch;循环语句

for(int i=0;i<3;i++) {                       
                        System.out.println(i);
                        break;
1
2
3
结果:0

outer:for(int i=0;i<3;i++) {
                        inner:for(int j=0;j<3;j++) {
                          System.out.println(i);
                          break outer;
1
2
3
4
结果:0

continue(继续)

continue作用范围:只作用于循环结构
结束本次循环,继续下次循环

for(int i=0;i<3;i++) {                       
                          System.out.println("i="+i);
                          continue;                       
                }
1
2
3
4
结果:

i=0
i=1
i=2
1
2
3
for(int i=0;i<10;i++) {       
                         if(i%2==0)
                        continue;        //当条件语句,如果i是偶数,就继续循环,直接i+1。
                          System.out.println("i="+i);                                         
                }
1
2
3
4
5
结果:

i=1
i=3
i=5
i=7
i=9
1
2
3
4
5
outer:for(int i=0;i<3;i++) {       
                        inner: for(int j=0;j<4;j++) {                                
                          System.out.println("i="+i);       
                          continue outer;        //结束outer循环,继续下一次outer循环
                         }
                }
1
2
3
4
5
6
结果:

i=0
i=1
i=2
1
2
3
练习

switch季节

需求2:根据用户的给定月份数据,显示该月份在哪个季节
3,4,5 春季
6,7,8夏季
9,10,11秋季
12,1,2春季
思路:
1.怎么获取数据?我只要关注变量。
2.对这个数据进行判断
步骤:
1.定义变量
2.定义if语句判断。
填代码:

int i = 12;
                if (i>2&&i<6)
                        System.out.println("春季");               
                else if(i>5&&i<9)
                        System.out.println("夏季");
                else if(i>8&&i<12)
                        System.out.println("秋季");                       
                else if((i>0&&i<3)||i==12)
                        System.out.println("冬季");                       
                //else if(i==12)
                //        System.out.println("冬季");                       
                else
                        System.out.println("输入错误,请重新输入");
1
2
3
4
5
6
7
8
9
10
11
12
13
或者

int i=12;
                switch(i) {
                case 3:
                case 4:
                case 5:
                        System.out.print("春季");
                        break;
                case 6:
                case 7:
                case 8:
                        System.out.print("夏季");
                        break;
                case 9:
                case 10:
                case 11:
                        System.out.print("秋季");
                        break;
                case 12:
                case 1:
                case 2:
                        System.out.print("冬季");
                        break;
            default:
                        System.out.print("没有对应的季节");
                        break;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
十六进制(重点&难点)

需求3:对给定的整数26,获取其十六进制的表现形式?(重点&难点)
思路:
1.什么是十六进制?数据的一种表现形式,好处在于可以表现形式更短。
原理:将十二进制中4位为一个十六进制位
2.原理就是对给定的整数进行二进制的每4位的获取。
(注意:计算机中是4个8位)
3.怎么获取每4位?其实就是获取四位中的1,可以通过&运算的方式完成。
4.而且想要获取下四位,可以通过对原数据进行无符号右移的方式。

步骤:
1.定义变量记录该整数。
2对该变量进行&运算,既然是获取四位,就&四个1,二进制四个1就是十进制的15.
3.对原数据进行无符号右移四位。

/*        ASCII   97   98   99  100  101  102
        '0'-'9' 'a'  'b'  'c'  'd'  'e'  'f'
                0-9  10   11   12   13   14   15
*/
                int num=26;
                int n1=num&15;                         
                         System.out.println("n1="+(char)(n1-10+'a'));
            num=num>>>4;
            int n2=num&15;
                         System.out.println("n2="+n2);
1
2
3
4
5
6
7
8
9
10
可以发现,运算是重复的,到底&15的结果是否需要做这个字母转换,无法确定。
所以通过学习的语句来完成。
1.通过循环,完成重复的运算。
2.通过if完成是否需要转成字母的判断。
转16进制语句版

              int num=26;
                for(int i=1;i<=8;i++) {               
                   int n=num&15;
                   if(n>9)
                          System.out.println("n="+(char)(n-10+'a'));               
                   else
                          System.out.println("n="+n);
                   num=num>>>4;                                               
                }
1
2
3
4
5
6
7
8
9
输出:

n=a
n=1
n=0
n=0
n=0
n=0
n=0
n=0
1
2
3
4
5
6
7
8
后记:两个问题没解决,1.反了;2.多零。需要对多数据进行存储。等数组学完后再完善。

三个数求最大

int a=1,b=5,c=3;
int tempMax=a>b?a:b;//变量中第一个单词首字母小写,第二个单词首字母大写;类的首字母大写;变量,方法的首字母小写
int max=tempMax>c?tempMax:c;
System.out.println("max="+max);
1
2
3
4
数字三角形(重点&难点)

需求:要求在屏幕上显示下列内容
54321
5432
54
5
大圈套小圈的思想,for嵌套循环。
先做内循环,看每一行

        for(int i=1;i<=5;i++) {
                        for(int j=5;j>=i;j--) {                               
                                System.out.print(j);                               
                        }
                        System.out.println();
                }
1
2
3
4
5
6
九九乘法表(重点&难点)

补充:table制表符
java中用"\t"来表示
其余转义字符: \n换行(Linux); \r换行(Windows); dos里两种都支持换行
java具有跨平台性,所以\n \r在java中不怎么用

for(int i=1;i<=9;i++) {
                        for(int j=1;j<=i;j++) {
                                System.out.print(j+"*"+i+"="+j*i+"\t" );                               
                        }
                        System.out.println();                       
                }
1
2
3
4
5
6
结果:

1*1=1       
1*2=2        2*2=4       
1*3=3        2*3=6        3*3=9       
1*4=4        2*4=8        3*4=12        4*4=16       
1*5=5        2*5=10        3*5=15        4*5=20        5*5=25       
1*6=6        2*6=12        3*6=18        4*6=24        5*6=30        6*6=36       
1*7=7        2*7=14        3*7=21        4*7=28        5*7=35        6*7=42        7*7=49       
1*8=8        2*8=16        3*8=24        4*8=32        5*8=40        6*8=48        7*8=56        8*8=64       
1*9=9        2*9=18        3*9=27        4*9=36        5*9=45        6*9=54        7*9=63        8*9=72        9*9=81       
1
2
3
4
5
6
7
8
9
输出"helloword"

System.out.println("\"helloworld\"");        // 用转义字符\"        
1
结果:

"helloworld"
---------------------
【转载】仅作分享,侵删
作者:ChunyeLi
原文:https://blog.csdn.net/sinat_32512123/article/details/84619320


2 个回复

倒序浏览
奈斯
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马