欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

day3 java运算符与流程控制

程序员文章站 2022-05-23 11:55:29
赋值运算 赋值运算符:=,+=,-=,×=,/=,%= 因为使用i = i+1可能无法通过编译,所以使用+=的方式赋值更好一些。还有在java中=是赋值,判断相等使用==。 逻辑运算符 &与&&的区别 &&是短路运算的与,即a&&b,当a为false是无论b是真还是假,结果都是假,故不再运行b,直接 ......

  赋值运算

  赋值运算符:=,+=,-=,×=,/=,%=

class fuzhiyunsuan{
        public static void main(String[] args){
                int i1 = 10;
                i1 += 3;//即i1 = i1 +3,但是这两者是有区别的
                //例如下面
                short s = 10;
                //s = s + 3;编译是无法通过的,会损失精度
                //s = (short)(s + 1);//强制修改精度,不建议
                s += 1;//即可以实现运算,又不会更改s的数据类型;
                System.out.println(s);
                /*
                 赋值运算符:=,+=,-=,×=,/=,%=
                  */

                //切记在java中=是赋值操作。
                boolean b1 = false;
                if(b1=true)
                        System.out.println("结果为真");
                else
                        System.out.println("结果为假");
        }
}
root@debian:/home/jeff/java_coding/day003# java fuzhiyunsuan 
11
结果为真

  因为使用i = i+1可能无法通过编译,所以使用+=的方式赋值更好一些。还有在java中=是赋值,判断相等使用==。

  逻辑运算符

day3 java运算符与流程控制

class logiccal{
        public static void main(String[] args){
                boolean a = true;
                boolean b = false;

                System.out.println(a & b);
                System.out.println(a && b);
                System.out.println(a | b);
                System.out.println(a || b);
                System.out.println(!a & b);
                System.out.println(a ^ b);

        }
}
root@debian:/home/jeff/java_coding/day003# java logiccal 
false
false
true
true
false
true

  &与&&的区别

  &&是短路运算的与,即a&&b,当a为false是无论b是真还是假,结果都是假,故不再运行b,直接跳出计算。

class logicdiff{
        public static void main(String[] args){
                boolean b = false;
                int i1 = 10;
                if(b & (i1++) > 0){
                        System.out.println("good");
                }else{
                        System.out.println("bad");
                }
                System.out.println(i1);

                int i2 = 10;
                if(b && (i2++) > 0){
                        System.out.println("good");
                }else{
                        System.out.println("bad");
                }
                System.out.println(i2);

}
}
root@debian:/home/jeff/java_coding/day003# java logicdiff 
bad
11
bad
10

  在此处即&左边为false,右边i++依然计算了,结果+1,&&右边未+1。更建议使用&&。

class logicdiff{
        public static void main(String[] args){
                boolean b = false;
                int i1 = 10;
                if(b & (10 / 0 == 0){
                        System.out.println("good");
                }else{
                        System.out.println("bad");
                }
                System.out.println(i1);

                int i2 = 10;
                if(b && 10/0 == 0){
                        System.out.println("good");
                }else{
                        System.out.println("bad");
                }
                System.out.println(i2);

}
}

  此处&在编译过程中会报错,但是&&则会通过编译。

  |与||同理。

  位运算

day3 java运算符与流程控制

class bitcal{
        public static void main(String[] args){
                int i1 = 31;
                System.out.println(i1<<3);
                System.out.println(i1<<28);

                System.out.println(i1>>2);
                System.out.println(i1>>>2);

                int i2 = -31;
                System.out.println(i2>>2);
                System.out.println(i2>>>2);
        }
}
root@debian:/home/jeff/java_coding/day003# java bitcal 
248
-268435456
7
7
-8
1073741816

  位移运算可能导致精度丢失。无符号位运算在负数时变化较大。

  两个变量换位问题

class exchange{
        public static void main(String[] args){
                int m = 111;
                int n = 233;
                System.out.println("m:"+m+"n:"+n);
                //1.提供中间变量
                int temp = m;
                m = n;
                n = temp;
                System.out.println("m:"+m+"n:"+n);

                //2.m,n较大可能会损失精度
                m = m+n;
                n = m-n;
                m = m-n;
                System.out.println("m:"+m+"n:"+n);

                //3.位运算
                m = m^n;
                n = m^n;
                m = m^n;
                System.out.println("m:"+m+"n:"+n);
        }
}

  运行结果

root@debian:/home/jeff/java_coding/day003# java exchange 
m:111n:233
m:233n:111
m:111n:233
m:233n:111

   三元表达式

  格式:(条件表达式)?表达式1:表达式2;

  当条件表达式为真,则运算结果为表达式1,当条件表达式为假,则运算结果为表达式2。

  表达式1和2应当为同种类型。

  三元表达式与if判断的差别为,三元表达式简化了if语句,三元表达式必须返回一个结果,if后面的代码快可以有多个语句。

class sanyuan{
        public static void main(String[] args){
                int i = 10;
                int j = 20;
                int max = (i > j)?i:j;
                System.out.println("较大值是"+max);

                String str = (i > j)?"i大":(i == j)?"相等":"j大";
                System.out.println(str);
        }
}

  运算结果

root@debian:/home/jeff/java_coding/day003# java sanyuan 
较大值是20
j大

   流程控制

  顺序结构

  程序自上而下,逐行运行。

  分支结构

  根据条件选择某条分支运行

  循环结构,根据循环条件重复性的执行某段代码。

  if语句的三种格式

if(true){执行代码块;}
if(条件表达式){执行代码块;}
else{执行代码块;}
if(条件表达式){执行代码块;}
else if(条件表达式){执行代码块;}
。。。
else{执行代码块;}
import java.util.Scanner;
class score{
        public static void main(String[] args){
                //创建一个scanner对象,用于键入数字
                Scanner uscore = new Scanner(System.in);
                System.out.println("请输入考试成绩");
                //调用此对象相应方法,完成键盘输入的值的获取
                //next():表示从键盘获取一个字符串,int表示键入的是整型数值用于比较
                int str = uscore.nextInt();

                System.out.println("你的成绩是"+str);

                if(str > 100 || str < 0){
                        System.out.println("你输入的成绩有误");
                }
                else{
                        if(str == 100){
                                System.out.println("第一名");
                        }else if(str > 80 && str<=99){
                                System.out.println("优秀");
                        }else if(str >=60 && str<= 80){
                                System.out.println("一般");
                        }else{
                                System.out.println("要加油啊");
                        }
                }
        }
}
root@debian:/home/jeff/java_coding/day003# java score 
请输入考试成绩
13
你的成绩是13
要加油啊
root@debian:/home/jeff/java_coding/day003# java score       
请输入考试成绩
100
你的成绩是100
第一名
root@debian:/home/jeff/java_coding/day003# java score 
请输入考试成绩
76
你的成绩是76
一般

   switch语句

switch(变量){
        case 值1:
        case 值2:
...
        default:
}
class switch1{
        public static void main(String[] args){
                int i = 1;
                switch(i){
                        case 0:
                                System.out.println("零");
                        case 1:
                                System.out.println("一");
                        case 2:
                                System.out.println("二");
                        default:
                                System.out.println("其他");
                }
        }
}

  运行结果

root@debian:/home/jeff/java_coding/day003# java switch1 
一
二
其他

  没有break退出循环体,那么匹配到分支以后还会继续执行其下的case语句。

  default是可选的,而且位置是灵活的。

class switch2{
        public static void main(String[] args){
                int i = 5;
                switch(i){
                        default:
                                System.out.println("其他");
                        case 0:
                                System.out.println("零");
                        case 1:
                                System.out.println("一");
                        case 2:
                                System.out.println("二");
                }
        }
}

  运行结果

root@debian:/home/jeff/java_coding/day003# java switch2 
其他
零
一
二
class switch3{
        public static void main(String[] args){
                int i = 5;
                switch(i){
                        default:
                                System.out.println("其他");
                                break;
                        case 0:
                                System.out.println("零");
                                break;
                        case 1:
                                System.out.println("一");
                                break;
                        case 2:
                                System.out.println("二");
                                break;
                }
        }
}
root@debian:/home/jeff/java_coding/day003# java switch3 
其他

  switch里的变量类型可以是:char,byte,short,int,枚举,String(jdk1.7)

  case的条件只能是值不能是取值范围。

  本节代码托管到我的github:day003。