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 個錯誤

循環控制

循環控制就是讓你的代碼可以循環執行

后續


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM