博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
三、 java运算符与流程控制
阅读量:5234 次
发布时间:2019-06-14

本文共 8653 字,大约阅读时间需要 28 分钟。

  赋值运算

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

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中=是赋值,判断相等使用==。

  逻辑运算符

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 falsefalsetruetruefalsetrue

  &与&&的区别

  &&是短路运算的与,即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 bad11bad10

  在此处即&左边为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);}}

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

  |与||同理。

  位运算

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-26843545677-81073741816

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

  两个变量换位问题

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:233m:233n:111m:111n:233m: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 较大值是20j大

   流程控制

  顺序结构

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

  分支结构

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

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

  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的条件只能是值不能是取值范围。

  注意:

  1. 取模的结果的符号取决于被模数,忽略模数的符号; 

  2.java的if(x=1){}的判断语句中如此赋值会报错,而不是与Python一样认同为条件为真,原因是java的Boolean类型只有两个值,不能是0和1.

  附:

  原码、反码、补码

  这里以java的byte类型来说明。

  八位二进制数的最高位是符号位,0为正数,1为负数,byte的范围是:-128~127。

  计算机底层存储都是补码形式,正数:原码、反码、补码都一样。负数则需要进行换算,比如在计算机底层存了一个1101 0011,这是一个负数的补码,所以先逆推出他的反码即补码-1=反码,反码就是1101 0010,通过反码再求出原码,原码=反码除符号位以外逐位取反,所以它的原码就是1010 1101,所以这个底层存的数值就是-45。 

  存在一个问题0000 0000 与1000 0000都是0,+0与-0定义重复了,实际上1000 0000实际值是-128: 

  1000 0001 :  这是补码  ->反码 1000 0000 -> 原码:1111 1111  -127

  1111 1111 :  这是补码  ->反码 1111 1110 -> 原码:1000 0001  -1
  1000 0000 :  特殊值  -127 - 1 = -128
  补码:
                    1000 0001 - 0000 0001 = 1000 0000
  所以byte的范围是-128~127,

转载于:https://www.cnblogs.com/Jeffding/p/8655961.html

你可能感兴趣的文章
struts2-通配符映射(基本没啥卵用)和动态调用
查看>>
Druid介绍2
查看>>
硬件电路
查看>>
Mysql/Oracle/达梦中数据字典表
查看>>
SQL Server 分区表
查看>>
JS高级程序设计 第七章 函数表达式
查看>>
C# 使用 StructLayoutAttribute 时 C# /C++ 内存空间分配与成员对齐问题
查看>>
Python调用百度地图API实现批量经纬度转换为实际省市地点(api调用,json解析,excel读取与写入)...
查看>>
Valve新员工手册
查看>>
C# CreateParams的使用(解决闪屏问题)
查看>>
【数据结构】数组操作(LowArrayApp.java)
查看>>
IAR MSP430设置合理堆栈大小(the stack pointer for stack is outside the stack range)
查看>>
Linux系统监测—查询系统CPU,内存,IO信息
查看>>
laravel 获取器和修改器
查看>>
mysql spider之拆库无忧
查看>>
Eclipse中文乱码解决方案
查看>>
C#通过字符串名称来调用对应字符串名称的方法
查看>>
Linux常用命令
查看>>
学习笔记:ASP.NET MVC之路由
查看>>
关于跨域的简单想法(此想法是错误的,特此备注)
查看>>