前言
??作者簡(jiǎn)介:熱愛(ài)跑步的恒川,致力于C/C++、Java、Python等多編程語(yǔ)言,熱愛(ài)跑步,喜愛(ài)音樂(lè)的一位博主。
??本文收錄于Java入門(mén)篇系列,該專欄主要講解:什么是java、java的數(shù)據(jù)類(lèi)型與變量、運(yùn)算符、程序的邏輯控制、方法的使用、數(shù)組的定義與使、類(lèi)和對(duì)象、繼承和多態(tài)、抽象類(lèi)和接口、認(rèn)識(shí)String類(lèi)、認(rèn)識(shí)異常等……持續(xù)更新,請(qǐng)大家拭目以待恒川的專欄!
??相關(guān)專欄C語(yǔ)言初階、C語(yǔ)言進(jìn)階、恒川的日常匯報(bào)系列等,大家有興趣的可以看一看
??Python零基礎(chǔ)入門(mén)系列,正在發(fā)展中,喜歡Python的朋友們可以關(guān)注一下哦!
1. 順序結(jié)構(gòu)
順序結(jié)構(gòu)比較簡(jiǎn)單,按照代碼書(shū)寫(xiě)的順序一行一行執(zhí)行。
System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
// 運(yùn)行結(jié)果
aaa
bbb
ccc
如果調(diào)整代碼的書(shū)寫(xiě)順序, 則執(zhí)行順序也發(fā)生變化
System.out.println("aaa");
System.out.println("ccc");
System.out.println("bbb");
// 運(yùn)行結(jié)果
aaa
ccc
bbb
2. 分支結(jié)構(gòu)
2.1 if 語(yǔ)句
- 語(yǔ)法格式1
if(布爾表達(dá)式){
// 語(yǔ)句
}
如果布爾表達(dá)式結(jié)果為true,執(zhí)行if中的語(yǔ)句,否則不執(zhí)行。
比如:小明,如果這次考試考到90分或以上,給你獎(jiǎng)勵(lì)一個(gè)雞腿。
int score = 92;
if(score >= 90){
System.out.println("吃個(gè)大雞腿!!!");
}
- 語(yǔ)法格式2
if(布爾表達(dá)式){
// 語(yǔ)句1
}else{
// 語(yǔ)句2
}
如果布爾表達(dá)式結(jié)果為true,則執(zhí)行if中語(yǔ)句,否則執(zhí)行else中語(yǔ)句。
比如:小明,如果這次考到90分以上,給你獎(jiǎng)勵(lì)一個(gè)大雞腿,否則獎(jiǎng)你一個(gè)大嘴巴子。
int score = 92;
if(score >= 90){
System.out.println("吃個(gè)大雞腿!!!");
}else{
System.out.println("挨大嘴巴子!!!");
}
- 語(yǔ)法格式3
if(布爾表達(dá)式1){
// 語(yǔ)句1
}else if(布爾表達(dá)式2){
// 語(yǔ)句2
}else{
// 語(yǔ)句3
}
表達(dá)式1成立,執(zhí)行語(yǔ)句1,否則表達(dá)式2成立,執(zhí)行語(yǔ)句2,否則執(zhí)行語(yǔ)句3
比如:考慮到學(xué)生自尊,不公開(kāi)分?jǐn)?shù)排名,因此:
- 分?jǐn)?shù)在 [90, 100] 之間的,為優(yōu)秀
- 分?jǐn)?shù)在 [80, 90) 之前的,為良好
- 分?jǐn)?shù)在 [70, 80) 之間的,為中等
- 分?jǐn)?shù)在 [60, 70) 之間的,為及格
- 分?jǐn)?shù)在 [ 0, 60) 之間的,為不及格
- 錯(cuò)誤數(shù)據(jù)
按照上述辦法通知學(xué)生成績(jī)。
if(score >= 90){
System.out.println("優(yōu)秀");
}else if(score >= 80 && score < 90){
System.out.println("良好");
}else if(score >= 70 && score < 80){
System.out.println("中等");
}else if(score >= 60 && score < 70){
System.out.println("及格");
}else if(score >= 0 && score < 60){
System.out.println("不及格");
}else{
System.out.println("錯(cuò)誤數(shù)據(jù)");
}
【練習(xí)】
- 判斷一個(gè)數(shù)字是奇數(shù)還是偶數(shù)
public static void main(String[] args) {
int num = 10;
if(num % 2 == 0) {
System.out.println("偶數(shù)!");
}else {
System.out.println("奇數(shù)!");
}
}
- 判斷一個(gè)數(shù)字是正數(shù),負(fù)數(shù),還是零
int num = 10;
if (num > 0) {
System.out.println("正數(shù)");
} else if (num < 0) {
System.out.println("負(fù)數(shù)");
} else {
System.out.println("0");
}
- 判斷一個(gè)年份是否為閏年
int year = 2000;
if (year % 100 == 0) {
// 判定世紀(jì)閏年
if (year % 400 == 0) {
System.out.println("是閏年");
} else {
System.out.println("不是閏年");
}
} else {
// 普通閏年
if (year % 4 == 0) {
System.out.println("是閏年");
} else {
System.out.println("不是閏年");
}
}
【注意事項(xiàng)】
代碼風(fēng)格
// 風(fēng)格1-----> 推薦
int x = 10;
if (x == 10) {
// 語(yǔ)句1
} else {
// 語(yǔ)句2
}
// 風(fēng)格2
int x = 10;
if (x == 10)
{
// 語(yǔ)句1
}
else
{
// 語(yǔ)句2
}
雖然兩種方式都是合法的, 但是 Java 中更推薦使用風(fēng)格1, { 放在 if / else 同一行. 代碼跟緊湊。
分號(hào)問(wèn)題
int x = 20;
if (x == 10);
{
System.out.println("hehe");
}
// 運(yùn)行結(jié)果
hehe
此處多寫(xiě)了一個(gè) 分號(hào), 導(dǎo)致分號(hào)成為了 if 語(yǔ)句的語(yǔ)句體, 而 { } 中的代碼已經(jīng)成為了和一個(gè) if 無(wú)關(guān)的代碼塊.
懸垂 else 問(wèn)題
int x = 10;
int y = 10;
if (x == 10)
if (y == 10)
System.out.println("aaa");
else
System.out.println("bbb");
if / else 語(yǔ)句中可以不加 大括號(hào) . 但是也可以寫(xiě)語(yǔ)句(只能寫(xiě)一條語(yǔ)句). 此時(shí) else 是和最接近的 if 匹配.
但是實(shí)際開(kāi)發(fā)中我們 不建議 這么寫(xiě). 最好加上大括號(hào).
2.2 switch 語(yǔ)句
基本語(yǔ)法
switch(表達(dá)式){
case 常量值1:{
語(yǔ)句1;
[break;]
}
case 常量值2:{
語(yǔ)句2;
[break;]
}
...
default:{
內(nèi)容都不滿足時(shí)執(zhí)行語(yǔ)句;
[break;]
}
}
執(zhí)行流程:
-
先計(jì)算表達(dá)式的值
-
和case依次比較,一旦有響應(yīng)的匹配就執(zhí)行該項(xiàng)下的語(yǔ)句,直到遇到break時(shí)結(jié)束
-
當(dāng)表達(dá)式的值沒(méi)有與所列項(xiàng)匹配時(shí),執(zhí)行default
代碼示例: 根據(jù) day 的值輸出星期
//不能做switch參數(shù)的數(shù)據(jù)類(lèi)型有哪些? 基本數(shù)據(jù)類(lèi)型當(dāng)中:float double long
int day = 1;
switch(day) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期日");
break;
default:
System.out.println("輸入有誤");
break;
}
【注意事項(xiàng)】
-
多個(gè)case后的常量值不可以重復(fù)
-
switch的括號(hào)內(nèi)只能是以下類(lèi)型的表達(dá)式:
基本類(lèi)型:byte、char、short、int,注意不能是long類(lèi)型
引用類(lèi)型:String常量串、枚舉類(lèi)型
double num = 1.0;
break 不要遺漏, 否則會(huì)失去 "多分支選擇" 的效果
switch 不能表達(dá)復(fù)雜的條件
switch 雖然支持嵌套, 但是很丑,一般不推薦~
switch(num) {
case 1.0:
System.out.println("hehe");
break;
case 2.0:
System.out.println("haha");
break;
}
// 編譯出錯(cuò)
Test.java:4: 錯(cuò)誤: 不兼容的類(lèi)型: 從double轉(zhuǎn)換到int可能會(huì)有損失
switch(num) {
^
1 個(gè)錯(cuò)誤
break 不要遺漏, 否則會(huì)失去 “多分支選擇” 的效果
int day = 1;
switch(day) {
case 1:
System.out.println("星期一");
// break;
case 2:
System.out.println("星期二");
break;
}
// 運(yùn)行結(jié)果
星期一
星期二
switch 不能表達(dá)復(fù)雜的條件
// 例如: 如果 num 的值在 10 到 20 之間, 就打印 hehe
// 這樣的代碼使用 if 很容易表達(dá), 但是使用 switch 就無(wú)法表示.
if (num > 10 && num < 20) {
System.out.println("hehe");
}
switch 雖然支持嵌套, 但是很丑,一般不推薦~
int x = 1;
int y = 1;
switch(x) {
case 1:
switch(y) {
case 1:
System.out.println("hehe");
break;
}
break;
case 2:
System.out.println("haha");
break;
}
代碼的美觀程度也是一個(gè)重要的標(biāo)準(zhǔn). 畢竟這是看臉的世界.
綜上, 我們發(fā)現(xiàn), switch 的使用局限性是比較大的
3. 循環(huán)結(jié)構(gòu)
3.1 while 循環(huán)
基本語(yǔ)法格式:
while(循環(huán)條件){
循環(huán)語(yǔ)句;
}
循環(huán)條件為 true, 則執(zhí)行循環(huán)語(yǔ)句; 否則結(jié)束循環(huán).
代碼示例1: 打印 1 - 10 的數(shù)字
int num = 1;
while (num <= 10) {
System.out.println(num);
num++;
}
代碼示例2: 計(jì)算 1 - 100 的和
int n = 1;
int result = 0;
while (n <= 100) {
result += n;
n++;
}
System.out.println(num);
// 執(zhí)行結(jié)果
5050
代碼示例3: 計(jì)算 5 的階乘
int n = 1;
int result = 1;
while (n <= 5) {
result *= n;
n++;
}
System.out.println(num);
// 執(zhí)行結(jié)果
120
代碼示例4: 計(jì)算 1! + 2! + 3! + 4! + 5!
int num = 1;
int sum = 0;
// 外層循環(huán)負(fù)責(zé)求階乘的和
while (num <= 5) {
int factorResult = 1;
int tmp = 1;
// 里層循環(huán)負(fù)責(zé)完成求階乘的細(xì)節(jié).
while (tmp <= num) {
factorResult *= tmp;
tmp++;
}
sum += factorResult;
num++;
}
System.out.println("sum = " + sum);
這里我們發(fā)現(xiàn), 當(dāng)一個(gè)代碼中帶有多重循環(huán)的時(shí)候, 代碼的復(fù)雜程度就大大提高了. 而比較復(fù)雜的代碼就更容易出錯(cuò).
后面我們會(huì)采用更簡(jiǎn)單的辦法來(lái)解決這個(gè)問(wèn)題.
注意事項(xiàng)
- 和 if 類(lèi)似, while 下面的語(yǔ)句可以不寫(xiě) { } , 但是不寫(xiě)的時(shí)候只能支持一條語(yǔ)句. 建議還是加上 { }
- 和 if 類(lèi)似, while 后面的 { 建議和 while 寫(xiě)在同一行.
- 和 if 類(lèi)似, while 后面不要多寫(xiě) 分號(hào), 否則可能導(dǎo)致循環(huán)不能正確執(zhí)行.
int num = 1;
while (num <= 10); {
System.out.println(num);
num++;
}
// 執(zhí)行結(jié)果
[無(wú)任何輸出, 程序死循環(huán)]
此時(shí) ; 為 while 的語(yǔ)句體(這是一個(gè)空語(yǔ)句), 實(shí)際的 { } 部分和循環(huán)無(wú)關(guān). 此時(shí)循環(huán)條件 num <= 10 恒成立, 導(dǎo)致代碼死循環(huán)了.
3.2 break
break 的功能是讓循環(huán)提前結(jié)束.
代碼示例: 找到 100 - 200 中第一個(gè) 3 的倍數(shù)
int num = 100;
while (num <= 200) {
if (num % 3 == 0) {
System.out.println("找到了 3 的倍數(shù), 為:" + num);
break;
}
num++;
}
// 執(zhí)行結(jié)果
找到了 3 的倍數(shù), 為:102
執(zhí)行到 break 就會(huì)讓循環(huán)結(jié)束.
3.3 continue
continue 的功能是跳過(guò)這次循環(huán), 立即進(jìn)入下次循環(huán).
代碼示例: 找到 100 - 200 中所有 3 的倍數(shù)
int num = 100;
while (num <= 200) {
if (num % 3 != 0) {
num++; // 這里的 ++ 不要忘記! 否則會(huì)死循環(huán).
continue;
}
System.out.println("找到了 3 的倍數(shù), 為:" + num);
num++;
}
代碼示例: 求100-200之間 既能被3整除 也能被4整除的數(shù)字 要求:使用continue
int i = 100;
while (i <= 200) {
if(i % 12 != 0) {
i++;
continue;
}
System.out.println(i);
i++;
}
執(zhí)行到 continue 語(yǔ)句的時(shí)候, 就會(huì)立刻進(jìn)入下次循環(huán)(判定循環(huán)條件), 從而不會(huì)執(zhí)行到下方的打印語(yǔ)句.
3.4 for 循環(huán)
【基本語(yǔ)法】
for(表達(dá)式①;布爾表達(dá)式②;表達(dá)式③){
表達(dá)式④;
}
- 表達(dá)式1: 用于初始化循環(huán)變量初始值設(shè)置,在循環(huán)最開(kāi)始時(shí)執(zhí)行,且只執(zhí)行一次
- 表達(dá)式2: 循環(huán)條件,滿則循環(huán)繼續(xù),否則循環(huán)結(jié)束
- 表達(dá)式3: 循環(huán)變量更新方式
【執(zhí)行過(guò)程】
①②③④—>②③④—>②③④—>②③④—>②③④—>②③④—>…—>②為false,循環(huán)結(jié)束。
【代碼示例】
- 打印 1 - 10 的數(shù)字
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
- 計(jì)算 1 - 100 的和
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println("sum = " + sum);
// 執(zhí)行結(jié)果
5050
- 計(jì)算 5 的階乘
int result = 1;
for (int i = 1; i <= 5; i++) {
result *= i;
}
System.out.println("result = " + result);
- 計(jì)算 1! + 2! + 3! + 4! + 5!
int sum = 0;
for (int i = 1; i <= 5; i++) {
int tmp = 1;
for (int j = 1; j <= i; j++) {
tmp *= j;
}
sum += tmp;
}
System.out.println("sum = " + sum);
【注意事項(xiàng)】 (和while循環(huán)類(lèi)似)
- 和 if 類(lèi)似, for 下面的語(yǔ)句可以不寫(xiě) { } , 但是不寫(xiě)的時(shí)候只能支持一條語(yǔ)句. 建議還是加上 { }
- 和 if 類(lèi)似, for 后面的 { 建議和 while 寫(xiě)在同一行.
- 和 if 類(lèi)似, for 后面不要多寫(xiě) 分號(hào), 否則可能導(dǎo)致循環(huán)不能正確執(zhí)行.
- 和while循環(huán)一樣,結(jié)束單趟循環(huán)用continue,結(jié)束整個(gè)循環(huán)用break
3.5 do while 循環(huán)(選學(xué))
【基本語(yǔ)法】
do{
循環(huán)語(yǔ)句;
}while(循環(huán)條件);
先執(zhí)行循環(huán)語(yǔ)句, 再判定循環(huán)條件,循環(huán)條件成立則繼續(xù)執(zhí)行,否則循環(huán)結(jié)束。
例如:打印 1 - 10
int num = 1;
do {
System.out.println(num);
num++;
} while (num <= 10);
【注意事項(xiàng)】
-
do while 循環(huán)最后的分號(hào)不要忘記
-
一般 do while 很少用到, 更推薦使用 for 和 while.
4. 輸入輸出
4.1 輸出到控制臺(tái)
基本語(yǔ)法
System.out.println(msg); // 輸出一個(gè)字符串, 帶換行
System.out.print(msg); // 輸出一個(gè)字符串, 不帶換行
System.out.printf(format, msg); // 格式化輸出
println
輸出的內(nèi)容自帶 \n, print
不帶 \n
printf
的格式化輸出方式和 C 語(yǔ)言的 printf
是基本一致的.
代碼示例
System.out.println("hello world");
int x = 10;
System.out.printf("x = %d\n", x)
格式化字符串
這個(gè)表格沒(méi)必要記住, 用到的時(shí)候根據(jù)需要查一下就行了.
4.2 從鍵盤(pán)輸入
使用 Scanner 讀取字符串/整數(shù)/浮點(diǎn)數(shù)
import java.util.Scanner; // 需要導(dǎo)入 util 包
Scanner sc = new Scanner(System.in);
System.out.println("請(qǐng)輸入你的姓名:");
String name = sc.nextLine();
//nextLine 讀入一行 next是遇到空格結(jié)束!
System.out.println("請(qǐng)輸入你的年齡:");
int age = sc.nextInt();
//讀入一個(gè)int類(lèi)型的整數(shù)
System.out.println("請(qǐng)輸入你的工資:");
?oat salary = sc.nextFloat();
System.out.println("你的信息如下:");
System.out.println("姓名: "+name+"\n"+"年齡:"+age+"\n"+"工資:"+salary);
sc.close(); // 注意, 要記得調(diào)用關(guān)閉方法
// 執(zhí)行結(jié)果
請(qǐng)輸入你的姓名:
張三
請(qǐng)輸入你的年齡:
18
請(qǐng)輸入你的工資:
1000
你的信息如下:
姓名: 張三
年齡:18
工資:1000.0
使用 Scanner 循環(huán)讀取 N 個(gè)數(shù)字,并求取其平均值
Scanner sc = new Scanner(System.in);
int sum = 0;
int num = 0;
while (sc.hasNextInt()) {
int tmp = sc.nextInt();
sum += tmp;
num++;
}
System.out.println("sum = " + sum);
System.out.println("avg = " + sum / num);
sc.close();
// 執(zhí)行結(jié)果
10
40.0
50.5
^Z
sum = 150.5
avg = 30.1
注意事項(xiàng):
當(dāng)循環(huán)輸入多個(gè)數(shù)據(jù)的時(shí)候, 使用 ctrl + z 來(lái)結(jié)束輸入 (Windows 上使用 ctrl + z, Linux / Mac 上使用 ctrl+ d).
在后續(xù)oj題當(dāng)中,遇到IO類(lèi)型的算法題,有各種循環(huán)輸入的要求,后序給大家介紹。
5. 猜數(shù)字游戲
游戲規(guī)則:
系統(tǒng)自動(dòng)生成一個(gè)隨機(jī)整數(shù)(1-100), 然后由用戶輸入一個(gè)猜測(cè)的數(shù)字. 如果輸入的數(shù)字比該隨機(jī)數(shù)小, 提示 “低了”, 如果輸入的數(shù)字比該隨機(jī)數(shù)大, 提示 “高了” , 如果輸入的數(shù)字和隨機(jī)數(shù)相等, 則提示 “猜對(duì)了” .
參考代碼文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-468896.html
//需要用到兩個(gè)包??!
import java.util.Random;
import java.util.Scanner;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Random random = new Random();
int randNum = random.nextInt(101);//[0,101)
//50-100的隨機(jī)數(shù) random.nextInt(50)--[0,50) + 50;
while (true) {
System.out.println("請(qǐng)輸入你要猜的數(shù)字:");
int num = scanner.nextInt();
if(num < randNum) {
System.out.println("猜小了!");
}else if(num == randNum) {
System.out.println("猜對(duì)了!");
break;
}else {
System.out.println("猜大了!");
}
}
}
如果這份博客對(duì)大家有幫助,希望各位給恒川一個(gè)免費(fèi)的點(diǎn)贊??作為鼓勵(lì),并評(píng)論收藏一下?,謝謝大家?。。?br> 制作不易,如果大家有什么疑問(wèn)或給恒川的意見(jiàn),歡迎評(píng)論區(qū)留言。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-468896.html
到了這里,關(guān)于【Java入門(mén)】長(zhǎng)達(dá)近萬(wàn)字來(lái)講解邏輯控制的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!