本文主要内容:
運算符、if-else、switch-case
一、位運算符
運算符之五:位運算符
每左移一位,相當于是在原來的基礎上乘2.
int i = 21;
System.out.println(“i<<2:”+(i<<2));
輸出:i<<2:84
結論:
1.位運算符操作的都是整形的資料
2.<<:在一定範圍内,每向左移一位,相當于*2
3.>>: 在一定範圍内,每向右移一位,相當于/2
交換兩個變量的值:
方式一:定義臨時變量
int temp = num1;
num1 = num2;
num2 = temp;
方式二:
num1 = num1+num2;
num2 = num1 - num2;
num1 = num1 - num2;
方式三:位運算符
三元運算符:
1.結構:(條件表達式)?表達式1:表達式2
2.說明
①條件表達式的結果為boolean類型
②根據條件表達式真或假,決定執行表達式1還是表達式2
如果表達式為true,則執行表達式1,如果表達式為false,則執行表達式2
③表達式1和表達式2要求是一緻的
double num = (m>m)? 2 : 1.0;
String maxStr = (m>n) ? "m大" : ((m==n) ? "m和n相等":"n大");
擷取三個值的最大值
int n1 = 12;
int n2 = 30;
int n3 = -43;
int max1 = (n1>n2) ? n1: n2;
int max2 = (max1 > n3) ? max1 : n3 ;
System.out.println("三個數中的最大值為:"+"max2");]
凡是可以使用三元運算符的地方,都可以改寫成if-else
反之,不成立。
如果程式既可以選擇三元運算符,又可以選擇if-else,則優先選擇三元運算符。原因:簡潔,執行效率高
二、流程控制語句
說明:
1.else結構是可選的
2.針對于條件表達式:
如果多個條件表達式之間是“互斥”關系(或沒有交集的關系),哪個判斷和執行語句聲明在上面還是下面,無所謂。
3.如果多個條件表達式之間有交集的關系,需要根據實際情況,考慮清楚應該哪個結構聲明在上面。
4.如果多個條件表達式之間有包含關系,通常情況下,需要将範圍小的聲明在範圍大的上面。否則,範圍小的就沒機會執行了。
5.if-else結構是可以互相嵌套的
第一種:
if(條件表達式){
執行表達式
}
第二種:二選一
if(條件表達式){
執行表達式1
}else{
執行表達式2
}
第三種:多選一
if(條件表達式){
執行表達式1
}else if(條件表達式){
執行表達式2
}else if{條件表達式}{
執行表達式2
}
彩票中獎的程式:
系統生成一個随機兩位數(10-99),與輸入的數比對兩位獎勵10000,比對一位獎勵1000,兩個數字順序颠倒獎勵3000,一個數字對位置不對獎勵500,其他情況無獎勵。
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("請輸入你的資料:");
int num = scan.nextInt();
//生成[10,99)之間的數。
int value = (int)(Math.random()*90+10);
System.out.println(value);
if(num%10 ==value%10) {
if(num/10 == value/10) {
System.out.println("獎勵10000美元!");
}
else {
System.out.println("獎勵1000美元");
}
}
else {
if(num/10 == value/10) {
System.out.println("獎勵1000美元!");
}
else {System.out.println("沒有獎勵");}
}
if((num/10 == value%10) && num%10 == value/10) {
System.out.println("獎勵3000美元");
}
if((num/10 == value%10) && num%10 != value/10) {
System.out.println("獎勵500美元");
}
if((num/10 != value%10) && num%10 == value/10) {
System.out.println("獎勵3000美元");
}
}
}
如何從鍵盤擷取不同類型的變量:需要使用Scanner類
具體實作步驟:
1.導包:import java.util.Scanner;
2.Scanner的執行個體化:Scanner scan =new Scanner(System.in)
3.調用Scanner類的相關方法(next()/nextXxx()),來擷取指定類型的變量
注意:
需要根據相應的方法,來輸入指定類型的值。如果輸入的資料與要求的類型不比對時,會報異常:InputMisMatchException,導緻程式終止
我的實作:
代碼:
import java.util.Scanner;
class ScannerTest{
public static void main(String[] args){
Scanner scan =new Scanner(System.in);
int num = scan.nextInt();
System.out.println(num);
}
}
除了String類型寫scan.next(); 其它資料類型都寫清楚是什麼類型的,比如
scan.nextInt();
對于char型的擷取,Scanner沒有提供相關的方法,隻能夠輸入一個字元串。
System.out.println("請輸入你的性别:(男/女)");
String gender = scan.next(); //"男"
char genderChar = gender.charAt(0); //擷取索引為0位置上的字元
switch-case結構
說明:
1.根據switch表達式中的值,依次比對各個case中的常量。一旦比對成功,則進入相應case結構中,調用其執行語句。
當調用完執行語句後,則仍然繼續向下執行其他case結構中的執行語句,直到遇到break關鍵字或此switch-case結構末尾為止結束
2.break可以使用在switch-case 結構中,一旦執行到break語句,則跳出switch-case結構。
3.switch結構中的表達式,隻能是如下的6種資料類型之一:byte、short、char、int、枚舉類型(JDK5.0新增)、String類型(JDK7.0新增)。
4.break關鍵字是可選的
5.case之後隻能聲明常量,不能聲明範圍
6.default相當于if-else結構中的else
default結構是可選的,而且位置是靈活的。
如果switch-case結構中的多個case的執行語句相同,則可以考慮進行合并。
7.凡是可以使用switch-case的結構,都可以轉換為if-else,反之不成立。
8.我們寫分支結構是,當發現既可以使用switch-case,(t同時switch中表達式的取值情況不太多),又可以使用if-else時,我們優先選擇使用switch-case.
原因:switch-case執行效率稍高。
編寫程式:從鍵盤上輸入2020年的“month”和“day”,要求通過程式輸出輸入的日期是2020年的第幾天
import java.util.Scanner;
class SwitchCaseTest2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("請輸入2019年的month:");
int month = scan.nextInt();
System.out.println("請輸入2019年的day:");
int day = scan.nextInt();
//定義一個變量來儲存總天數
int sumDays = 0;
switch(month){
case 12:
sumDays += 30;
case 11:
sumDays += 31;
case 10:
sumDays += 30;
case 9:
sumDays += 31;
case 8:
sumDays += 31;
case 7:
sumDays += 30;
case 6:
sumDays += 31;
case 5:
sumDays += 30;
case 4:
sumDays += 31;
case 3:
sumDays += 28;
case 2:
sumDays += 31;
case 1:
sumDays += day;
}
System.out.println("2019年" + month + "月" + day + "日是當年的第" + sumDays + "天");
}
}