Java基礎(chǔ)語(yǔ)法:邏輯控制
一、邏輯控制語(yǔ)句
1. 順序結(jié)構(gòu)
像我們寫的代碼,執(zhí)行時(shí)會(huì)按照從上到下一行一行的執(zhí)行。這就是順序結(jié)構(gòu),不同的順序,結(jié)果可能就不一樣。如
System.out.println(1) System.out.println(2) System.out.println(3)
該代碼結(jié)果為 1(換行)2(換行)3,但是如果把順序改變結(jié)果就變了
System.out.println(2) System.out.println(3) System.out.println(1)
該代碼結(jié)果就變?yōu)?2(換行)3(換行)1
2. 分支結(jié)構(gòu)
2.1 if 語(yǔ)句
和 C 語(yǔ)言一樣,在 Java 中 if 語(yǔ)句也有三種基本的形式
形式一
if(布爾表達(dá)式){
// 條件滿足時(shí)執(zhí)行的代碼
}
形式二
if(布爾表達(dá)式){
// 條件滿足時(shí)執(zhí)行的代碼
}else{
// 條件不滿足時(shí)執(zhí)行的代碼
}
形式三
if(布爾表達(dá)式1){
// 條件1滿足時(shí)執(zhí)行的代碼
}else if(布爾表達(dá)式2){
// 條件2滿足時(shí)執(zhí)行的代碼
}else{
// 條件都不滿足時(shí)執(zhí)行的代碼
}
但是從形式上我們就可以看出還是有一些不同的
1.條件表達(dá)式必須是布爾值,不能像 C 語(yǔ)言一樣直接使用一個(gè)數(shù)值,如
int a = 10;
if(a){
System.out.println(a);
}
這種代碼就是錯(cuò)的,條件必須是布爾值
int a = 10;
if(a > 0){
System.out.println(a);
}
這種代碼就是正確的
2.代碼風(fēng)格問(wèn)題,比如我寫 C 語(yǔ)言時(shí)喜歡把一對(duì)大括號(hào)并列在行首。但是在 java 中更推薦上述三種形式那樣的風(fēng)格,將 { 放在 if 或 else 同一行
3.還要注意懸垂 else 問(wèn)題,記住 else 是與 最接近的 if 匹配。如
int a = 2;
if(a>0)
if(a>10)
System.out.println("a > 10");
else
System.out.println("a > 0 && a <= 10");
我們要知道,最下面的 else 是與與它最近的 if 匹配的
2.2 switch 語(yǔ)句
Java 中的 switch 語(yǔ)句和 C 語(yǔ)言中的幾乎一樣,大家如果不太熟悉 switch 以及該章所講解的一些邏輯結(jié)構(gòu)可以去看看我寫的 C語(yǔ)言三大語(yǔ)句注意事項(xiàng) 。但是既然不是完全一樣,那哪里有區(qū)別呢?
在 Java 中,switch(表達(dá)式) 中的表達(dá)式是有類型限制的。
它只能使用:整數(shù)(只包括 byte、short、int)、字符(char)、字符串(String)、枚舉類型
3. 循環(huán)結(jié)構(gòu)
3.1 while 循環(huán)
舒服,Java 的 while 循環(huán)和 C 語(yǔ)言也是極其類似,只有一個(gè)小的差異
while (表達(dá)式) 中的表達(dá)式必須是布爾值
3.2 break
break 的功能是:讓最靠近包裹它的整個(gè)循環(huán)提前結(jié)束。這也是和 C 語(yǔ)言是一樣的
3.3 continue
continue 的功能是:跳過(guò)本次循環(huán),立即進(jìn)入下次循環(huán)。這也是和 C 語(yǔ)言是一樣的
3.4 for 循環(huán)
Java 中的 for 循環(huán)和 C 語(yǔ)言中的也很類似,只有一個(gè)差異
for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 中的表達(dá)式2是循環(huán)的判斷條件,要使用布爾值
3.5 do while 循環(huán)
Java 中的 do while 循環(huán)也是和 C 語(yǔ)言很類似,只有一個(gè)差異
while 中的循環(huán)條件只能是布爾值
但是一般不推薦使用,因?yàn)樗辽贂?huì)執(zhí)行一次循環(huán),不注意可能會(huì)犯錯(cuò)
二、輸入輸出方式
1. 輸出到控制臺(tái)
1.基本語(yǔ)法
System.out.println(msg); // 輸出一個(gè)字符串,自帶換行 System.out.print(msg); // 輸出一個(gè)字符串,不帶換行 System.out.printf(format,msg); // 格式化輸出,括號(hào)內(nèi)內(nèi)容類似于 C 語(yǔ)言的 printf
2.代碼示例
int a = 10;
System.out.println(a); // 輸出 a,自帶換行
System.out.print(a); // 輸出 a,不帶換行
System.out.printf("%d\n",a); // 格式化輸出,括號(hào)內(nèi)內(nèi)容類似于 C 語(yǔ)言的 printf
3.格式化輸出表(隨用隨查)
| 轉(zhuǎn)換符 | 類型 | 例子 | 輸出結(jié)果 |
|---|---|---|---|
| d | 十進(jìn)制整數(shù) | ("%d",100) | 100 |
| x | 十六進(jìn)制整數(shù) | ("%x",100) | 64 |
| o | 八進(jìn)制整數(shù) | ("%o",100) | 144 |
| f | 定點(diǎn)浮點(diǎn)數(shù) | ("%f",100f) | 100.000000 |
| e | 指數(shù)浮點(diǎn)數(shù) | ("%e",100f) | 1.000000e+02 |
| g | 通用浮點(diǎn)數(shù) | ("%g",100f) | 100.000 |
| a | 十六進(jìn)制浮點(diǎn)數(shù) | ("%a",100) | 0x1.9p6 |
| s | 字符串 | ("%s",100) | 100 |
| c | 字符 | ("%d",‘1') | 1 |
| b | 布爾值 | ("%b",100) | true |
| h | 散列碼 | ("%h",100) | 64 |
| % | 百分號(hào) | ("%.2f%%",2/7f) | 0.29% |
2. 從鍵盤輸入
1.讀入一個(gè)字符(不推薦使用)
直接使用 System.in.read() 可以讀入一個(gè)字符,但是需要搭配異常處理。如果不搭配異常,如下面代碼就會(huì)編譯出錯(cuò)
public static void main(String[] args) {
System.out.print("Enter a char:");
char i = (char)System.in.read();
System.out.println("The char is :" + i);
}
我們需要將鼠標(biāo)放到 read 上面,再按住 Alt + Enter 鍵就會(huì)出現(xiàn)

再點(diǎn)擊第一個(gè)或者第二個(gè)就不會(huì)報(bào)錯(cuò)了。這里其實(shí)是處理了異常,但是一個(gè)簡(jiǎn)單的讀入字符就要這么復(fù)雜所以不推薦使用。
2.使用 Scanner 讀取字符/字符串/整數(shù)/浮點(diǎn)數(shù)/布爾值
1.首先需要導(dǎo)入 util 包 import java.util.Scanner; ,在 IDEA 中,其可以通過(guò)輸入 Scanner 后直接回車快速導(dǎo)入
2.然后再構(gòu)造一個(gè) Scanner 對(duì)象并與”標(biāo)準(zhǔn)輸入流“ System.in 關(guān)聯(lián): Scanner 對(duì)象名 = new Scanner(System.in);
3.再就可以通過(guò) Scanner 類的各種方法實(shí)現(xiàn)輸入操作了
import java.util.Scanner;
public class TestDemo {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a = in.nextInt(); //讀入一個(gè)整數(shù)
double b = in.nextDouble(); //讀入一個(gè)浮點(diǎn)數(shù)
boolean c = in.nextBoolean(); //讀入一個(gè)布爾值
String s = in.next(); //讀入一個(gè)字符串
}
}
但是要注意,上述讀入字符串是按空白符當(dāng)作分隔符的,故只能讀入第一個(gè)空格之前的字符。如果想要讀取該行的所有字符(包含空格),應(yīng)該使用
String s = in.nextLine();
但是使用這個(gè)方法還是有很大的缺陷,如果這行代碼上面還有其他讀入的語(yǔ)句,可能這行代碼就不會(huì)實(shí)行。因?yàn)樯弦恍械幕剀嚳赡鼙凰x入,直接這行結(jié)束。因此,只能將其放在讀入代碼的第一個(gè)或者在它前面加一個(gè)
in.nextLine();
來(lái)讀取掉之前的回車。
3.我們知道在 C 語(yǔ)言中可以寫類似于這樣的代碼輸入多組數(shù)據(jù)
int a;
while(scanf("%d",&a) != EOF)
{
// 內(nèi)容
}
在 C++ 中我們也可以寫類似于這樣的代碼輸入多組數(shù)據(jù)
int a;
while(cin>>a)
{
// 內(nèi)容
}
那么在 Java 中怎么做呢?代碼如下
Scanner in = new Scanner(System.in);
while(in.hasNextInt()){
int a = in.nextInt();
// 內(nèi)容
}
并且在 IDEA 上我們可以手動(dòng)輸入 Ctrl + D 結(jié)束,在 Windows 的 cmd 上 我們手動(dòng)輸入 Ctrl + Z 結(jié)束,在 Linux 或 Mac 上,輸入 Ctrl + D 結(jié)束
三、猜數(shù)字游戲
學(xué) C 語(yǔ)言的時(shí)候我們可能都接觸過(guò)隨機(jī)數(shù)的生成,或者直接寫一個(gè)猜隨機(jī)數(shù)的游戲。那么使用 Java 該怎么寫呢?
1.首先我們要知道在 Java 中隨機(jī)數(shù)是怎么生成的。
1.首先需要導(dǎo)入 util 包 import java.util.Random; ,在 IDEA 中,其可以通過(guò)輸入 Random 后直接回車快速導(dǎo)入
2.然后通過(guò) Random 類中的方法生成我們想要的,如
import java.util.Random;
public class TestDemo {
public static void main(String[] args) {
Random random = new random(); // 默認(rèn)隨機(jī)種子是系統(tǒng)時(shí)間
int rand = random.nextInt(bound:100) + 1;
// random.nextInt(bound:100) 是生成[0,100)間的隨機(jī)整數(shù)
}
}
接下來(lái)就是很簡(jiǎn)單了,只要我們輸入的數(shù)字與隨機(jī)數(shù)字進(jìn)行一下比較。直到判斷正確再退出就可。故最終的代碼是
public class TestDemo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Random random = new Random();
int rand = random.nextInt(100) + 1;
while (true){
System.out.print("請(qǐng)輸入你所猜測(cè)的數(shù)字:");
int num = scanner.nextInt();
if(num == rand){
System.out.println("恭喜你,猜對(duì)了!");
break;
}else if(num < rand){
System.out.println("很遺憾,你猜的數(shù)字小了!");
}else{
System.out.println("很遺憾,你猜的數(shù)字大了!");
}
}
}
}
四、總結(jié)
本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
SpringBoot解決jar包沖突的問(wèn)題,簡(jiǎn)單有效
這篇文章主要介紹了SpringBoot解決jar包沖突的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
java使用UDP實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)通信
這篇文章主要為大家詳細(xì)介紹了java使用UDP實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)通信,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
Java在ElasticSearch中使用LocalDatetime類型
最近在開(kāi)發(fā)一個(gè)搜索功能的需求的時(shí)候,遇到了LocalDatetime類型不能保存到ElasticSearch中的問(wèn)題,這篇文章主要介紹了Java在ElasticSearch中使用LocalDatetime類型2023-10-10
Java Collection集合遍歷運(yùn)行代碼實(shí)例
這篇文章主要介紹了Java Collection集合遍歷運(yùn)行代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
SpringCloud讀取Nacos配置中心報(bào)錯(cuò)及遇到的坑:Could?not?resolve?placehold
這篇文章主要介紹了SpringCloud讀取Nacos配置中心報(bào)錯(cuò):Could?not?resolve?placeholder?‘xxx’?in?value?‘${xxx},本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03
解決Spring Boot 多模塊注入訪問(wèn)不到j(luò)ar包中的Bean問(wèn)題
這篇文章主要介紹了解決Spring Boot 多模塊注入訪問(wèn)不到j(luò)ar包中的Bean問(wèn)題。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09

