四、邏輯控制
1.if…else(常用)
1.1表達(dá)格式(三種)
-
小括號里面進(jìn)行判斷條件是否符合,正確執(zhí)行語句
if(布爾表達(dá)式){ 語句 }
-
在小括號里面進(jìn)行條件判斷,正確執(zhí)行語句1,錯誤執(zhí)行語句2
if (布爾表達(dá)式) { 語句1 }else{ 語句2 }
-
表達(dá)式1正確,執(zhí)行語句1,諾表達(dá)式1不正確,
則去判斷表達(dá)式2是否正確,正確則執(zhí)行語句2,
表達(dá)式2不正確,則去語句3。if(布爾表達(dá)式1){ 語句1 }else if(布爾表達(dá)式2){ 語句2 }else{ 語句3 }
外入:為了能將值能夠通過鍵盤等工具,輸入到計算機里面,java為此提供了一個方法Scanner。我們不需要懂的實現(xiàn)原理,只需要知道它的作用,和實現(xiàn)方法就行。這就是java的其中一個好處。
如何使用?
Scanner scanner=new Scanner(System.in);
//整型接收
int l= scanner.nextInt();//提供整型輸入
//浮點型接收
float h= scanner.nextFloat();//提供一個浮點數(shù)輸入
//字符串接收
String p=scanner.next();//提供了一個字符串輸入
//沒有輸入char類型的方法
將兩者結(jié)合一下:
實例1:
題目:輸入一個1~100的數(shù)字來代表一個學(xué)生的成績,并給他或她給予這門課評價
分?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) 之間的,為不及格
Scanner scanner=new Scanner(System.in);
//整型接收
int score = scanner.nextInt();//提供整型輸入
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("錯誤數(shù)據(jù)");
}
實例2:
判斷一個年份是否是閏年(什么是閏年?就是一般年份多天的年份),如何解題?
四年一閏、百年不閏、400年再閏
用年份除以4,沒有余數(shù)的就是閏年,有余數(shù)的是平年,如果是世紀(jì)年(整百年)則是除以400。
Scanner scanner=new Scanner(System.in);
//整型接收
int year = scanner.nextInt();//輸入年份
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("不是閏年");
}
}
2.switch…case(用的少)
2.1表達(dá)式
switch(表達(dá)式){
case 常量值1:{
語句1;
break;//終止語句
}
case 常量值2:{
語句2;
break;//終止語句
}
.....
default:{
內(nèi)容都不滿足時執(zhí)行語句;
break;//終止語句
}
}
- 先計算表達(dá)式的值
- 和case依次比較,一旦有響應(yīng)的匹配就執(zhí)行該項下的語句,直到遇到break時結(jié)束
- 當(dāng)表達(dá)式的值沒有與所列項匹配時,執(zhí)行default
實例1
輸入一個數(shù)(1~10)的數(shù),判斷它是星期幾
Scanner scanner=new Scanner(System.in);
//整型接收
int day = scanner.nextInt();//輸入日期
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("這個數(shù)不在日期中");
break;
}
注意:
- 多個case后的常量值不可以重復(fù)
-
switch的括號內(nèi)只能是以下類型的表達(dá)式:
基本類型:byte、char、short、int,注意不能是long類型
引用類型:String常量串、枚舉類型
3.while(常用)
3.1語法格式
-
循環(huán)條件為 true, 則執(zhí)行循環(huán)語句; 當(dāng)條件不滿足時為false,則結(jié)束循環(huán).
while(循環(huán)條件){ 循環(huán)語句; }
實例1:
計算 1 ~ 100 的和
int n = 1;
int result = 0;
while (n <= 100) {
result += n;
n++;
}
System.out.println(num);//5050
實例2:
計算 5 的階乘
int n = 1;
int result = 1;
while (n <= 5) {
result *= n;
n++;
}
System.out.println(num);//120
實例3
計算 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);
注意:
循環(huán)內(nèi)的條件一定要設(shè)置好,諾是沒有設(shè)置好就會一直循環(huán),直到程序吃完你的所有運算資源。然后崩潰。
3.2關(guān)鍵字beak:
break 的功能是讓循環(huán)提前結(jié)束.
實例:找到 100 - 200 中第一個 3 的倍數(shù)
int num = 100;
while (num <= 200) {
if (num % 3 == 0) {
System.out.println("找到了 3 的倍數(shù), 為:" + num);//102
break;
}
num++;
}
3.3關(guān)鍵字 continue:
continue 的功能是跳過這次循環(huán), 立即進(jìn)入下次循環(huán)
實例:
找到 100 - 200 中所有 3 的倍數(shù)
int num = 100;
while (num <= 200) {
if (num % 3 != 0) {
num++;
continue;
}
System.out.println("找到了 3 的倍數(shù), 為:" + num);
num++;
}
4.for…(常用)
4.1語法格式
表達(dá)式1: 用于初始化循環(huán)變量初始值設(shè)置,在循環(huán)最開始時執(zhí)行,且只執(zhí)行一次
表達(dá)式2: 循環(huán)條件,滿足條件,則繼續(xù)循環(huán),否則循環(huán)結(jié)束
表達(dá)式3: 循環(huán)變量變化方式
for(表達(dá)式1;布爾表達(dá)式2;表達(dá)式3){
表達(dá)式4;
}
如何執(zhí)行?
(1,2,3,4)—>(2,3,4)—>(2,3,4)—>(2,3,4)—>(2不滿足條件)終止循環(huán)
實例1:
計算 1 ~ 100 的和
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println("sum = " + sum);5050
實例3
計算 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);
注意:
和while循環(huán)一樣,結(jié)束單趟循環(huán)用continue,結(jié)束整個循環(huán)用break
5.while…do(不常用)
5.1基本語法
-
先執(zhí)行循環(huán)語句, 再判定循環(huán)條件,循環(huán)條件成立則繼續(xù)執(zhí)行,否則循環(huán)結(jié)束。
do{ 循環(huán)語句; }while(循環(huán)條件);
實例
int num = 1;
do {
System.out.println(num);
num++;
} while (num <= 10);
邏輯控制小總結(jié)
1.常用for,if,while,等邏輯控制
2.switch,case,break,要一起用
3.break終止當(dāng)前循環(huán),continue跳出這次循環(huán)
五、方法
在實際開發(fā)中,有一些代碼是會被重復(fù)使用的。首先我們假設(shè)一個應(yīng)用場景,假設(shè)有一個程序描述了一個計算器。一個計算器有乘,除,加,減,根號?,F(xiàn)在我需要計算一個數(shù)字,先除,再乘,再除。那么我們就需要寫入一個關(guān)于除法的代碼,寫一個乘法的代碼,然后再寫一個除法的代碼。你看我們寫了兩次除法的代碼。這樣就太不方便了。
1.定義
所以在這是Java就引入了一個概念,方法,將一個代碼用方法裝起來,等需要用的時候就將,方法名放入帶到要使用的代碼中,通過這個方法名調(diào)用這個代碼。
修飾符 返回值類型 方法名稱([參數(shù)類型 形參 …]){
方法體代碼;
[return 返回值];
}
2.模塊化
public static int add(int x, int y) {
System.out.println("調(diào)用方法中 x = " + x + " y = " + y);
return x + y;
}
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("第一次調(diào)用方法之前");
int ret = add(a, b);
System.out.println("第一次調(diào)用方法之后");
System.out.println("ret = " + ret);
System.out.println("第二次調(diào)用方法之前");
ret = add(30, 50);
System.out.println("第二次調(diào)用方法之后");
System.out.println("ret = " + ret);
}
1.實參和形參的關(guān)系
看見括號中的參數(shù)嗎?這個是參數(shù),而參數(shù)分為形參和實參。
形參:就相當(dāng)于add函數(shù)中的自變量x,用來接收add函數(shù)在調(diào)用時傳遞的值的。形參的名字可以隨意取,對方法都沒有任何影響,形參只是方法在定義時需要借助的一個變量,用來保存方法在調(diào)用時傳遞過來的值。
實參:通過實際參數(shù)可以更改變量的值的參數(shù)。
這里就不得不說一個東西。數(shù)據(jù)在內(nèi)存中如何存儲?
真實的存儲中,存儲一個數(shù)據(jù)會將一個唯一的地址與一個數(shù)據(jù)進(jìn)行映射。形參就是將數(shù)據(jù)扔給add方法。而實參就是通過地址映射,來進(jìn)行修改數(shù)據(jù)。此時add中對a進(jìn)行改動,那么地址與之對應(yīng)的數(shù)據(jù)就會改變
public static int getSum(int n){ // n是形參
return n / 2;
}
getSum(10); // 10是實參,在方法調(diào)用時,形參n用來保存10
getSum(100); // 100是實參,在方法調(diào)用時,形參n用來保存100
3.重載(重要后邊有大用)
在Java中,如果多個方法的名字相同,參數(shù)列表不同,則稱該幾種方法被重載了。
為什么這樣呢?我要去買菜,一個豬肉20塊一斤,一斤白菜3.6塊。那么問題來了。我要買一斤豬肉,3斤白菜。我要計算我要花多少錢。那么我就需要定義一個addMet(),addVegetable()然后總和??墒嵌际羌臃?,為什么不定義一個add()只要中間的代碼不同不就行了。
public class TestMethod {
public static void main(String[] args) {
add(1, 2); // 調(diào)用add(int, int)
add(1.5, 2.5); // 調(diào)用add(double, double)
add(1.5, 2.5, 3.5); // 調(diào)用add(double, double, double)
}
public static int add(int x, int y) {
return x + y;
注意:
- 方法名必須相同
- 參數(shù)列表必須不同(參數(shù)的個數(shù)不同、參數(shù)的類型不同、類型的次序必須不同)
- 與返回值類型是否相同無關(guān)
4.重寫(重要后邊有大用)
5.遞歸(重要,一種思維方式)
這種思想在數(shù)學(xué)和編程中非常有用,因為有些時候,我們遇到的問題直接并不好解決,但是發(fā)現(xiàn)將原問題拆分成其子問題之后,子問題與原問題有相同的解法,等子問題解決之后,原問題就迎刃而解了。文章來源:http://www.zghlxwxcb.cn/news/detail-702295.html
//計算階乘
public static void main(String[] args) {
int n = 5;
int ret = factor(n);
System.out.println("ret = " + ret);
}
public static int factor(int n) {
if (n == 1) {
return 1;
}
return n * factor(n - 1); // factor 調(diào)用函數(shù)自身
}
具體實現(xiàn)過程,紅色為調(diào)用,綠色為返回
注意:文章來源地址http://www.zghlxwxcb.cn/news/detail-702295.html
- 將原問題劃分成其子問題,注意:子問題必須要與原問題的解法相同
- 遞歸出口
方法小總結(jié)
- 修飾符(權(quán)限修飾符):public(公開)
- 返回值類型:如果方法有返回值,返回值類型必須要與返回的實體類型一致,如果沒有返回值,必須寫成void
- 方法名字:采用小駝峰命名
- 參數(shù)列表:如果方法沒有參數(shù),()中什么都不寫,如果有參數(shù),需指定參數(shù)類型,多個參數(shù)之間使用逗號隔開
- 方法體:方法內(nèi)部要執(zhí)行的語句
- 在java當(dāng)中,方法必須寫在類當(dāng)中
- 在java當(dāng)中,方法不能嵌套定義
- 在java當(dāng)中,沒有方法聲明一說
到了這里,關(guān)于Java(三)邏輯控制(if....else,循環(huán)語句)與方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!