Java学习日记——基础篇(三-上)基本语法之运算符和流程控制
运算符
算术运算符
听其名而知其意,就是用于计算的,java中常用的是:
- + 加
- - 减
- * 乘
- / 除
- % 取模,取余——%可以用来得到两个数相除的余数
小练习——写一个java程序判断两个数是否能够整除
public class Demo1 //公共类必须和文件名相同 { public static void main (String []args) { int a=2; int b= 4; if(b%a == 0) //=代表赋值 ==代表相等 { System.out.println("可以整除!"); } else { System.out.println("不能整除!"); } } } 运行结果: D:\myJavaDemo>javac -encoding UTF-8 Demo1.java D:\myJavaDemo>java Demo1 可以整除!
- ++ 自加 —— a++ —— a = a + 1
- -- 自减 —— b-- —— b = b - 1
实例:前自加和后自加的区别
public class Demo1 { public static void main (String []args) { int a = 1; int b = ++a; int c = 1; int d = c++; System.out.println(b); System.out.println(d); } } 输出结果: 2 1
结论:总之就记住 ++ 在 a 前面,a的值就会先则增加。-- 也是相同的
int b = ++a; { a = a + 1; b = a; } int b = a++; { b = a; a = a+1; }
问:这段代码的结果是多少
public class Demo1 { public static void main (String []args) { int a = 3; int b = ++(++a)--; System.out.println(b); } }
答案是:
D:\myJavaDemo>javac -encoding UTF-8 Demo1.java Demo1.java:12: 错误: 意外的类型 int b = ++(++a)--; ^ 需要: 变量 找到: 值 1 个错误 答案是会报错, 可见自加自减运算符并不是随心所欲的进行自加自减的 为什么会报错呢? 因为++a在进行自加后,就处于一个不稳定状态,编译器不知道a是什么,确定不了a是一个小数还是一个字符或者什么的。 报错说的错误就是我不知道,我不知道就是个意外。 所以自加自减运算符要跟着一个确定的值
- += 左加
- -= 左减
- /= 左除
- *= 左乘
- %= 左取模
小例子
a += 90 ——> a = a + 90 b += a ——> b = b + a a -= 90 ——> a = a - 90 a *= 90 ——> a = a * 90 a /= 90 ——> a = a / 90 a %= 90 ——> a = a % 90
关系运算符
- == 等于
- > 大于
- >= 大于等于
- < 小于
- <= 小于等于
- != 不等于
练习:请编写一个程序,改程序可以接受两个数(可以使整数,也可以是小数),并判断这两个数是大于?小于?还是等于?
import java.io.*; //InputStreamReader 和 BufferedReader 都在这个包里面,所以要把这个包引进来 public class Demo1 { public static void main (String []args) { //从控制台接受两个数 try { //输入流,从键盘接收数 InputStreamReader isr = new InputStreamReader(System.in); //system.in代表标准输入,就是键盘 BufferedReader br = new BufferedReader(isr); //这些内容到控制台中才会详细讲解 System.out.println("请输入一个数"); //提示 //从控制台读取一行数据 String a1=br.readLine(); //控制台不管输入的是数还是字符串,他都认为是字符串,所以要用String接受 System.out.println("请输入第二个数"); //提示 String a2=br.readLine(); //把String -> float float num1 = Float.parseFloat(a1); float num2 = Float.parseFloat(a2); if (num1 > num2) { System.out.println("第一个大"); } if(num1 == num2) { System.out.println("相等"); } if(num1 < num2) { System.out.println("第二个大"); } }catch(Exception e) { e.printStackTrace(); } } }
注意如果出现这样的报错信息——找不到符号,说明编译器找不到这个类,就要意识到自己有没有把包含这个类的包导进去
D:\myJavaDemo>javac -encoding UTF-8 Demo1.java Demo1.java:19: 错误: 找不到符号 InputStreamReader isr = new InputStreamReader(System.in); ^ 符号: 类 InputStreamReader 位置: 类 Demo1
逻辑运算符
逻辑运算符——用于进行逻辑判断
- || 或
- && 与
- ! 非 —————— 把结果进行取反
案例
public class Demo1 { public static void main(String args[]) { int a=90; int b = 90; if(a==b||a>8){System.out.println("ok1");} b--; if(a>b&&a>8){System.out.println("ok2");} if(!(a<=b)){System.out.println("ok3");} } } 输出结果: ok1 ok2 ok3
三大流程控制——顺序控制,分支控制,循环控制
顺序控制
程序从上到下,从左向右,依次执行
示例:
public class Demo1 { public static void main(String args[]) { int a = 7; System.out.println("a="+a); System.out.println("hello!"); a++; System.out.println("a="+a); System.out.println("qwq"); a++; System.out.println("a="+a); } }
分支控制
让程序有选择的执行,分支控制有三种——单分支,双分支,多分支
单分支结构
if(条件表达式) { 语句; } //条件表达式可以很长,但最终结果是个布尔值就行
双分支结构
if(条件表达式) { 语句; } else { 语句; }
多分支结构一
if(条件表达式) { 语句; } else if(条件表达式) { 语句; } else if(条件表达式) { 语句; } else { 语句; }
小例子——就是多个分支中选择一个走出来
public class Demo1 { public static void main(String args[]) { int a = 17; if(a>18) { System.out.println("a>18"); } else if(a>10 && a<18) { System.out.println("a>10 && a<=18"); } else{ System.out.println("others"); } } }
多分支结构二——开关结构
switch(条件表达式) { case 常量1: 语句1; break; case 常量2: 语句2; break; ......... case 常量n; 语句n; break; default: 语句; break; }
小例子:
public class Demo1 { public static void main(String args[]) { char c = 'a'; switch(c) { case 'a': System.out.println("今天星期一"); case 'b': System.out.println("今天星期二"); default: System.out.println("不知道星期几"); } } } 输出结果: 今天星期一 今天星期二 不知道星期几 因为没有加break语句,所以都会输出
加break语句
public class Demo1 { public static void main(String args[]) { char c = 'a'; switch(c) { case 'a': System.out.println("今天星期一"); break; case 'b': System.out.println("今天星期二"); break; default: System.out.println("不知道星期几"); } } } 输出结果: 今天星期一
注意1:如果case后面的值相同,就会出现这样的报错——标签重复
Demo1.java:11: 错误: case 标签重复 case 'a': ^ 1 个错误
注意2:switch后的 条件表达式的数据类型,应该和case后的常量类型一致
import java.io.*; public class Demo3 { public static void main (String args[]) throws Exception { String str; int a; BufferedReader buf; buf=new BufferedReader(new InputStreamReader(System.in)); str = buf.readLine(); a=Integer.parseInt(str); switch(a) { case a<=100&&a>=90:System.out.println("优");break; case a<90&&a>=80:System.out.println("良");break; case a<80&&a>=70:System.out.println("中");break; case a<70&&a>=60:System.out.println("及格");break; case a<60&&a>=0:System.out.println("不及格");break; default:System.out.println("input error");break; } } } 报错: D:\myJavaDemo>javac -encoding UTF-8 Demo3.java Demo3.java:14: 错误: 不兼容的类型: boolean无法转换为int case a<=100&&a>=90:System.out.println("优");break; ^ Demo3.java:15: 错误: 不兼容的类型: boolean无法转换为int case a<90&&a>=80:System.out.println("良");break; ^ Demo3.java:16: 错误: 不兼容的类型: boolean无法转换为int case a<80&&a>=70:System.out.println("中");break; ^ Demo3.java:17: 错误: 不兼容的类型: boolean无法转换为int case a<70&&a>=60:System.out.println("及格");break; ^ Demo3.java:18: 错误: 不兼容的类型: boolean无法转换为int case a<60&&a>=0:System.out.println("不及格");break; ^ 5 个错误
//逻辑运算符和关系运算符最后返回的是个boolean(布尔类型),而case后面需要int类型
tips:
InputStreamReader isr = new InputStreamReader(System.in); buf = new BufferedReader(isr) 上面的代码和下面的代码是相同的,之前的代码是用的上面的这种形式 buf = new BufferedReader(new InputStreamReader(System.in));
注意3:switch中可用的数据类型主要是:byte , short , int , char , enum(枚举类型)
public class Demo4 { public static void main(String args[]) { int a = 20.1; switch(a) { case 12.3:System.out.println("12.3");break; case 4.5:ystem.out.println("4.5");break; default:System.out.println("其它"); } } } 报错: D:\myJavaDemo>javac -encoding UTF-8 Demo4.java Demo4.java:5: 错误: 不兼容的类型: 从double转换到int可能会有损失 int a = 20.1; ^ Demo4.java:8: 错误: 不兼容的类型: 从double转换到int可能会有损失 case 12.3:System.out.println("12.3");break; ^ Demo4.java:9: 错误: 不兼容的类型: 从double转换到int可能会有损失 case 4.5:ystem.out.println("4.5");break; ^ Demo4.java:9: 错误: 程序包ystem不存在 case 4.5:ystem.out.println("4.5");break; ^ 4 个错误
循环控制
循环控制就是让你的代码可以循环执行