運算符
算術運算符
聽其名而知其意,就是用於計算的,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 個錯誤
循環控制
循環控制就是讓你的代碼可以循環執行
