1 順序語(yǔ)句
語(yǔ)句:使用分號(hào)分隔的代碼稱作為一個(gè)語(yǔ)句沟涨。
注意:沒(méi)有寫(xiě)任何代碼只是一個(gè)分號(hào)的時(shí)候虐秦,也是一條語(yǔ)句,稱作空語(yǔ)句断凶。
順序語(yǔ)句就是按照從上往下的順序執(zhí)行的語(yǔ)句。
2 判斷(if…else)
在我們找工作的過(guò)程中巫俺,要求兩年工作經(jīng)驗(yàn)以上且年齡超過(guò)30歲认烁。
什么是判斷語(yǔ)句:用于判斷的語(yǔ)句叫判斷語(yǔ)句。
1.格式一
if(判斷條件){
如果符合條件執(zhí)行的代碼;
執(zhí)行的代碼塊1介汹;
執(zhí)行的代碼塊2却嗡;
……………….;
執(zhí)行的代碼塊n嘹承;
}
練習(xí):提示用戶輸入一個(gè)整數(shù)窗价。如果該整數(shù)是5的倍數(shù),打印“5的倍數(shù)”如果是2的倍數(shù)打印“2的倍數(shù)”
提示:為了便于讓用戶輸入數(shù)據(jù)叹卷,我們使用Scanner這個(gè)類撼港,固定用法Scanner sc=new Scanner(System.in); 該類需要導(dǎo)入包import java.util.Scanner;
int nextInt = sc.nextInt();獲取用戶輸入的數(shù)字
import java.util.Scanner;
public class Demo9 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int nextInt = sc.nextInt();
if(nextInt%5==0){
System.out.println("是5的倍數(shù)");
}
if(nextInt%2==0){
System.out.println("是2的倍數(shù)");
}
}
}
2.格式二
if(判斷條件){
執(zhí)行的代碼塊1;
執(zhí)行的代碼塊2骤竹;
……………….帝牡;
執(zhí)行的代碼塊n;
}else{
執(zhí)行的代碼塊1蒙揣;
執(zhí)行的代碼塊2靶溜;
……………….;
執(zhí)行的代碼塊n懒震;
}
案例:判斷一個(gè)整數(shù)是奇數(shù)還是偶數(shù)
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請(qǐng)輸入一個(gè)整數(shù):");
int nextInt = sc.nextInt();
if (nextInt % 2 == 0) {
System.out.println("是偶數(shù)");
} else {
System.out.println("是奇數(shù)");
}
System.out.println("over");
}
同樣道理如果花括號(hào)中只有一條語(yǔ)句罩息,那么花括號(hào)可以省略不寫(xiě),初學(xué)者不推薦省略挎狸。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請(qǐng)輸入一個(gè)整數(shù):");
int nextInt = sc.nextInt();
if (nextInt % 2 == 0)
System.out.println("是偶數(shù)");
else
System.out.println("是奇數(shù)");
System.out.println("over");
}
觀察發(fā)現(xiàn)if else語(yǔ)句有點(diǎn)類似于三元運(yùn)算符.其實(shí)三元運(yùn)算符是if else 的一種簡(jiǎn)寫(xiě)格式.
Public static void main(String[] args) {
int x = 0, y = 1, b;
// if else 語(yǔ)句
if (x > y) {
b = x;
} else {
b = y;
}
System.out.println(b);// 1
// 3元運(yùn)算
b = x > y ? x : y;
System.out.println(b); // 1
}
這兩種格式是一樣的扣汪。if else 結(jié)構(gòu) 簡(jiǎn)寫(xiě)格式: 變量 = (條件表達(dá)式)?表達(dá)式1:表達(dá)式2断楷;
三元運(yùn)算符:
好處:可以簡(jiǎn)化if else代碼锨匆。
弊端:因?yàn)槭且粋€(gè)運(yùn)算符,所以運(yùn)算完必須要有一個(gè)結(jié)果。
3. 格式三
if(判斷條件1){
執(zhí)行的代碼塊1恐锣;
}else if(判斷條件2){
執(zhí)行語(yǔ)句;
}else if(判斷條件3){
執(zhí)行語(yǔ)句茅主;
}
需求: 根據(jù)用戶定義的數(shù)值不同,打印對(duì)應(yīng)的星期英文。if 只能進(jìn)行一層判斷,if else 只能進(jìn)行兩層判斷,那么需要多層判斷時(shí)呢?星期可是有7個(gè)數(shù)的土榴。如何設(shè)計(jì)代碼诀姚?
使用if 語(yǔ)句
public static void main(String[] args) {
int x = 8;
if (x == 1) {
System.out.println("星期一");
}
if (x == 2) {
System.out.println("星期二");
}
if (x == 3) {
System.out.println("星期三");
}
}
如果這樣設(shè)計(jì)的話,第一個(gè)if語(yǔ)句執(zhí)行完畢后,第二個(gè)語(yǔ)句仍會(huì)執(zhí)行(去判斷),是一個(gè)順序結(jié)構(gòu).那么事實(shí)上當(dāng)前定義的星期之后會(huì)有一個(gè).假如,第一個(gè)已經(jīng)符合條件,那么剩余的執(zhí)行就沒(méi)有意義了。屬于邏輯錯(cuò)誤玷禽。
使用if else 赫段,如果用戶輸入的是7以外的數(shù)據(jù),那么怎么處理矢赁?就需要使用else 了
方案2:使用if else if語(yǔ)句
public static void main(String[] args) {
int x = 8;
if (x == 1) {
System.out.println("星期一");
} else if (x == 2) {
System.out.println("星期二");
} else if (x == 3) {
System.out.println("星期三");
} else if (x == 4) {
System.out.println("星期四");
} else if (x == 5) {
System.out.println("星期五");
} else if (x == 6) {
System.out.println("星期六");
} else if (x == 7) {
System.out.println("星期日");
} else {
System.out.println("請(qǐng)輸入數(shù)字1-7");
}
}
注意:
public static void main(String[] args) {
int x = 5;
if (x == 1) {
System.out.println("1");
}
if (x == 2) {
System.out.println("2");
}
if (x == 3) {
System.out.println("3");
} else {
System.out.println("4"); // 4
}
}
該if 語(yǔ)句不是一個(gè)整體,第一個(gè)if 是一個(gè)語(yǔ)句糯笙,第二個(gè)又是一個(gè)語(yǔ)句,最后的if else 又是一個(gè)語(yǔ)句。
if語(yǔ)句特點(diǎn)
- 第二種格式與三元運(yùn)算符的區(qū)別:三元運(yùn)算符運(yùn)算完要有值出現(xiàn)撩银。好處是:可以寫(xiě)在其他表達(dá)式中给涕。
- 條件表達(dá)式無(wú)論寫(xiě)成什么樣子,只看最終的結(jié)構(gòu)是否是true 或者 false额获。
練習(xí)1: 根據(jù)用戶輸入的月份,打印出月份所屬的季節(jié).
練習(xí)2: 根據(jù)用戶輸入的成績(jī)够庙,進(jìn)行評(píng)級(jí),根據(jù)學(xué)生考試成績(jī)劃分ABCD
練習(xí)1:
public static void main(String[] args) {
int x = 1;
if (x == 3) {
System.out.println("spring");
} else if (x == 4) {
System.out.println("spring");
}
}
仔細(xì)觀察:發(fā)現(xiàn)if和else if要執(zhí)行的語(yǔ)句是一樣的抄邀,可不可以合并呢耘眨。當(dāng)然是可以的。怎么合并境肾?使用邏輯運(yùn)算符毅桃,那么使用哪個(gè)邏輯運(yùn)算符呢, &肯定不行准夷。需要全部為真才為真钥飞,月份是不可能同時(shí)滿足的 那么使用|連接符號(hào)即可。意思只要其中一個(gè)為真衫嵌,就為真读宙。另外可以使用短路功能。
public static void main(String[] args) {
int x = 1;
if (x == 3 || x == 4 || x == 5) {
System.out.println("spring");
} else if (x == 6 || x == 7 || x == 8) {
System.out.println("Summer");
} else if (x == 9 || x == 10 || x == 11) {
System.out.println("autumn");
} else {
System.out.println("Winter");
} else {
System.out.println("月份不存在");
}
}
練習(xí)2:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請(qǐng)輸入考試分?jǐn)?shù):");
double score = sc.nextDouble();
char grade;
if (score >= 90.0)
grade = 'A';
else if (score >= 80.0)
grade = 'B';
else if (score >= 70.0)
grade = 'C';
else if (score >= 60.0)
grade = 'D';
else
grade = 'F';
System.out.println("你的成績(jī)是:" + grade);
}
If語(yǔ)句常見(jiàn)的錯(cuò)誤:
1.忘記必要的括號(hào):如果代碼塊中只有一條語(yǔ)句的時(shí)候楔绞,可以省略花括號(hào)结闸,但是當(dāng)花括號(hào)將多條語(yǔ)句擴(kuò)在一起時(shí),花括號(hào)就不能在省略酒朵。
double radius = 4;
double area;
if (radius >= 0)
area = radius * radius * 3.14;
System.out.println("The area " + " is " + area);
double radius = 4;
double area;
if (radius >= 0) {
area = radius * radius * 3.14;
System.out.println("The area " + " is " + area);
}
雖然代碼一樣多桦锄,但是第一個(gè)會(huì)編譯報(bào)錯(cuò)(area沒(méi)有出初始化),第二個(gè)正常運(yùn)行蔫耽。就是因?yàn)樯倭嘶ɡㄌ?hào)结耀。所以一定要仔細(xì)。
2.if語(yǔ)句后出現(xiàn)分號(hào)
double radius = 0;
double area;
if (radius > 0); {
area = radius * radius * 3.14;
System.out.println("The area " + " is " + area);
}
注意:這是一個(gè)邏輯錯(cuò)誤,編譯和運(yùn)行都不會(huì)報(bào)錯(cuò)图甜,只是不會(huì)出現(xiàn)想要的結(jié)果碍粥。
相當(dāng)于判斷符合條件后,執(zhí)行一個(gè)空語(yǔ)句黑毅。
double radius = 0;
double area;
if (radius > 0){}{
area = radius * radius * 3.14;
System.out.println("The area " + " is " + area);
}
判斷閏年
1:什么是閏年嚼摩?可以被4整除不能被100整除,或者可以被400整除矿瘦,那么這一年就是閏年(leap year)
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請(qǐng)輸入年份:");
int year = sc.nextInt();
// 判斷年份能否被4整除
boolean isLeapYear = (year % 4 == 0);
// 年份能被4整除枕面,并且不能被100整除并且使用&&(and)
isLeapYear = isLeapYear && (year % 100 != 0);
// 年份或者能夠被400整除
isLeapYear = isLeapYear || (year % 400 == 0);
if (isLeapYear) {
System.out.println(year + "是閏年!");
}
// 簡(jiǎn)寫(xiě)格式缚去;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
System.out.println(year + "是閏年膊畴!");
}
}
3 選擇判斷語(yǔ)句(switch)
switch語(yǔ)句
格式:
switch(表達(dá)式)
{
case 取值1:
執(zhí)行語(yǔ)句;
break病游;
case 取值2:
執(zhí)行語(yǔ)句唇跨;
break;
…...
default:
執(zhí)行語(yǔ)句衬衬;
break买猖;
}
switch語(yǔ)句特點(diǎn):
1,switch語(yǔ)句選擇的類型只有四種:byte,short滋尉,int 玉控, char。
2,case之間與default沒(méi)有順序狮惜。先判斷所有的case高诺,沒(méi)有匹配的case執(zhí)行
default。
3,switch語(yǔ)句停止的條件是遇到了break關(guān)鍵字或者結(jié)束switch語(yǔ)句的大括號(hào)碾篡。
4,如果匹配的case或者default沒(méi)有對(duì)應(yīng)的break虱而,那么程序會(huì)繼續(xù)向下執(zhí)行,運(yùn)
行可以執(zhí)行的語(yǔ)句开泽,直到遇到break或者switch結(jié)尾結(jié)束牡拇。
5,switch case中的值必須要與switch表達(dá)式的值具有相同的數(shù)據(jù)類型穆律。而且case后跟的值必須是常量惠呼,不能跟變量。
案例:
public static void main(String[] args) {
int x = 3;
switch (x) {
case 1:
System.out.println("1");
break;
case 2:
System.out.println("2");
break;
case 3:
System.out.println("3");
break;
default:
System.out.println("ok");
break;
}
}
case 就像選擇題的答案之一峦耘。 break 就是如果該答案正確那么就可以跳出switch 了,意思就是說(shuō) 已經(jīng)找出了正確的答案了剔蹋。那么這道題也就做完了。如果 case 沒(méi)有匹配接著進(jìn)行下一個(gè)case 匹配,直到匹配為止辅髓。 最后如果都沒(méi)有匹配上,那么 switch 給提供了一個(gè)默認(rèn)的答案,就是 default泣崩。
注意: case后跟的是冒號(hào):
每個(gè)case中的執(zhí)行語(yǔ)句一定要加break少梁;
練習(xí):
需求2:根據(jù)用于指定的月份,打印該月份所屬的季節(jié).
一旦case匹配,就會(huì)順序執(zhí)行后面的程序代碼,而不管后面的case是否匹配,直到遇見(jiàn)break,利用這一特性可以讓好幾個(gè)case執(zhí)行統(tǒng)一語(yǔ)句.
345 spring 678 sunmer 9 10 11 autumn 12 1 2 winter
public static void main(String[] args) {
int x = 3;
switch (x) {
case 3:
case 4:
case 5:
System.out.println("spring");
break;
case 6:
case 7:
case 8:
System.out.println("sunmer");
break;
case 9:
case 10:
case 11:
System.out.println("autumn");
break;
case 12:
case 0:
case 1:
System.out.println("winter");
default:
System.out.println("ok");
break;
}
}
練習(xí):char 類型在switch 中的使用.
public static void main(String[] args) {
int x = 1, y = 2;
char ch = '';
switch (ch) {
case '+':
System.out.println("xy=" + (x + y));
break;
case '-':
System.out.println("x-y="+(x-y));
break;
case '':
System.out.println("xy="+(x*y));
break;
case '/':
System.out.println("x/y="+(x/y));
break;
default:
System.out.println("不靠譜");
}
}
if 和switch 語(yǔ)句很像,具體什么場(chǎng)景下,應(yīng)用哪個(gè)語(yǔ)句呢?
如果判斷的具體數(shù)值不多,而是符號(hào)byte,short int char 四種類型.
雖然2個(gè)語(yǔ)句都可以使用,建議使用switch語(yǔ)句.因?yàn)樾噬愿?
其他情況:
對(duì)區(qū)間判斷,對(duì)結(jié)果為boolean 類型判斷,使用if if的使用范圍更廣律想。
if 除了能判斷具體數(shù)值還能判斷區(qū)間猎莲。switch 判斷區(qū)間會(huì)很費(fèi)勁的绍弟。要寫(xiě)好多case 對(duì)于運(yùn)算結(jié)果是boolean型的 if 能判斷 switch 是不能實(shí)現(xiàn)的技即。例如:根據(jù)學(xué)生考試成績(jī)劃分ABCD A90-100 B80-89 C70-79 D60-69 E0-59。
實(shí)際開(kāi)發(fā)怎么選擇呢?
如果要對(duì)具體數(shù)值進(jìn)行判斷,并且數(shù)值不多,那么 就用switch 來(lái)完成樟遣。switch的case條件都是編譯期整數(shù)常量而叼,編譯器可以做到表格跳轉(zhuǎn)查詢,查找速度快豹悬。
但是switch 的局限性比較大必須是4種類型,并且值不多葵陵。一般都是使用if。 最后在jdk 7中對(duì)switch 進(jìn)行了增強(qiáng) 還可以判斷字符串瞻佛。5.0 增加了對(duì)枚舉的判斷脱篙。
備注:JDK7.0開(kāi)始可以使用switch可以使用字符串類型的數(shù)據(jù)了.
4 While循環(huán)
需求:需要打印一行字符串"hello gzitcast",100次
就需要將該語(yǔ)句打印100遍System.out.println("hello gzitcast");
那么如何解決該問(wèn)題伤柄?
Java提供個(gè)一個(gè)稱之為循環(huán)的結(jié)構(gòu)绊困,用來(lái)控制一個(gè)操作的重復(fù)執(zhí)行。
int count = 0;
while (count < 100) {
System.out.println("hello gzitcast");
count++;
}
System.out.println("over");
變量count初始化值為0适刀,循環(huán)檢查count<100 是否為true,如果為true執(zhí)行循環(huán)體(while后{}之間的語(yǔ)句)秤朗,輸出"hello gzitcast"語(yǔ)句,然后count自增一笔喉,重復(fù)循環(huán)取视,直到count是100時(shí),也就是count<100為false時(shí)常挚,循環(huán)停止作谭。執(zhí)行循環(huán)之后的下一條語(yǔ)句。
Java提供了三種類型的循環(huán)語(yǔ)句:while循環(huán)奄毡,do-while循環(huán)和for循環(huán)丢早。
1、while語(yǔ)句格式:
while(條件表達(dá)式)
{
執(zhí)行語(yǔ)句秧倾;
}
定義需求: 想要打印5次helloworld
public static void main(String[] args) {
System.out.println("hello world");
System.out.println("hello world");
System.out.println("hello world");
System.out.println("hello world");
System.out.println("hello world");
}
2怨酝、
public static void main(String[] args) {
int x = 0;
while (x < 5) {
System.out.println("hello java ");
}
}
如果是在dos里編譯和運(yùn)行,是不會(huì)停止那先,除非系統(tǒng)死機(jī)农猬。需要ctrl+c來(lái)結(jié)束。
這就是真循環(huán)或者死循環(huán)售淡。因?yàn)閤<5 永遠(yuǎn)為真斤葱。
public static void main(String[] args) {
int x = 0;
while (x < 5) {
System.out.println("hello java ");
x++;
}
}
讓x自增慷垮,那么就會(huì)有不滿足條件的時(shí)候。循環(huán)就會(huì)結(jié)束揍堕。
練習(xí):想要打印出1-100之間的奇數(shù)
public static void main(String[] args) {
int x = 1;
while (x < 100) {
System.out.println(x);
x = x + 2;
}
}
public static void main(String[] args){
int x=1;
while(x<100){
if(x%2!=0){
System.out.print(x);
}
x++;
}
System.out.println();
}
練習(xí)2:計(jì)算1+2+3+4+5+6+7+8+9 的值
int sum = 0;
int i = 1;
while (i < 10) {
sum = sum + i;
i++;
}
System.out.println(sum);
注意:要精確控制循環(huán)的次數(shù)料身。常犯錯(cuò)誤是是循環(huán)多執(zhí)行一次或者少執(zhí)行一次。
例如會(huì)執(zhí)行101次衩茸,想要執(zhí)行100次芹血,要么是count初始值為1,然后count<=100
要么是count初始值為0楞慈,coung<100
int count = 0;
while (count <=100) {
System.out.println("hello gzitcast");
count++;
}
System.out.println("over");
猜數(shù)字游戲:
編寫(xiě)程序隨即生成一個(gè)0-100之間的隨機(jī)數(shù)幔烛。程序提示用戶輸入一個(gè)數(shù)字,不停猜測(cè)囊蓝,直到猜對(duì)為止饿悬。最后輸出猜測(cè)的數(shù)字,和猜測(cè)的次數(shù)聚霜。并且如果沒(méi)有猜中要提示用戶輸入的值是大了還是小了狡恬。
思考:
如何生成1-100之間隨機(jī)數(shù)?
(int)(Math.random()*100)+1;
如何提示用戶輸入數(shù)字蝎宇,
Scanner sc=new Scanner(System.in);
int guessNum = sc.nextInt();
需要將隨機(jī)數(shù)和用戶輸入的數(shù)字進(jìn)行比較弟劲。
猜一次:
Scanner sc = new Scanner(System.in);
int num = (int)(Math.random()100)+1;
System.out.println("請(qǐng)輸入0-100之間整數(shù)");
int guessNum = sc.nextInt();
if (guessNum == num) {
System.out.println("中啦");
} else if (guessNum < num) {
System.out.println("小啦");
} else {
System.out.println("大了");
}
這個(gè)程序只能才一次,如何讓用戶重復(fù)輸入直到猜對(duì)夫啊?
可以使用while循環(huán)
public static void main(String[] args) {
int num = (int)(Math.random()100)+1;
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("請(qǐng)輸入1-100之間整數(shù)");
int guessNum = sc.nextInt();
if (guessNum == num) {
System.out.println("中啦");
} else if (guessNum < num) {
System.out.println("小啦");
} else {
System.out.println("大了");
}
}
}
該方案發(fā)現(xiàn)了問(wèn)題函卒,雖然實(shí)現(xiàn)了讓用戶不停的輸入,但是即使猜中了程序也不會(huì)停止撇眯。
那么就需要控制循環(huán)次數(shù)了报嵌。也就是while() 括號(hào)中的條件表達(dá)式。當(dāng)用戶猜測(cè)的數(shù)和系統(tǒng)生成的數(shù)字不相等時(shí)熊榛,就需要繼續(xù)循環(huán)锚国。
int num = (int)(Math.random()*100)+1;
Scanner sc = new Scanner(System.in);
int guessNum = -1;
while (guessNum != num) {
System.out.println("請(qǐng)輸入1-100之間整數(shù)");
guessNum = sc.nextInt();
if (guessNum == num) {
System.out.println("中啦");
} else if (guessNum < num) {
System.out.println("小啦");
} else {
System.out.println("大了");
}
}
為什么將guessNum初始化值為-1?因?yàn)槿绻跏蓟癁?到100之間程序會(huì)出錯(cuò)玄坦,因?yàn)榭赡苁且碌臄?shù)血筑。
1:首先程序生成了一個(gè)隨機(jī)數(shù)
2:用戶輸入一個(gè)數(shù)字
3:循環(huán)檢查用戶數(shù)字和隨機(jī)數(shù)是否相同,知道相同位置煎楣,循環(huán)結(jié)束
5 do while 語(yǔ)句
do while語(yǔ)句格式:
do
{
執(zhí)行語(yǔ)句豺总;
}while(條件表達(dá)式);
do while特點(diǎn)是條件無(wú)論是否滿足,
循環(huán)體至少被執(zhí)行一次择懂。
public static void main(String[] args) {
int x = 0, y = 0;
do {
System.out.println(x);
x++;
} while (x < 0);
// do while do會(huì)先執(zhí)行一次,不管是否滿足循環(huán)條件喻喳。
while (y < 0) {
System.out.println(y);
y++;
}
}
while:先判斷條件,只有條件滿足才執(zhí)行循環(huán)體困曙。
do while: 先執(zhí)行循環(huán)體表伦,再判斷條件谦去,條件滿足,再繼續(xù)執(zhí)行循環(huán)體蹦哼。
簡(jiǎn)單一句話:do while:無(wú)論條件是否滿足鳄哭,循環(huán)體至少執(zhí)行一次。
注意一個(gè)細(xì)節(jié)do while 后面的分號(hào);
案例:改寫(xiě)猜數(shù)字游戲
public static void main(String[] args) {
// 記錄用戶輸入的數(shù)字
int guess = -1;
// 記錄用戶輸入次數(shù)
int count = 0;
// 生成1-100之間隨機(jī)數(shù)
int num = (int) (int)(Math.random()*100)+1;
Scanner sc = new Scanner(System.in);
// 循環(huán)猜數(shù)字
do {
System.out.println("請(qǐng)輸入1-100之間的數(shù)字");
guess = sc.nextInt();
if (guess > num) {
System.out.println("哥們纲熏,太大了");
} else if (guess < num) {
System.out.println("哥們妆丘,太小了");
} else {
System.out.println("恭喜,中啦");
}
count++;
} while (num != guess);
System.out.println("你猜測(cè)的數(shù)字是:" + num + "猜測(cè)了" + count + "次");
}
案例:計(jì)算器
系統(tǒng)自動(dòng)生成2個(gè)隨機(jī)數(shù)用于參與運(yùn)算赤套。
系統(tǒng)生成0-4之間的隨機(jī)數(shù)飘痛,表示加減乘除取模運(yùn)算珊膜。
使用switch 進(jìn)行匹配
class Couter {
public static void main(String[] args) throws InterruptedException {
// 生成隨機(jī)數(shù)Math.random()生成0-1值容握,不包含0和1,
//乘以10得到0和10之間的數(shù)(double類型)车柠,不包含0和10
//強(qiáng)轉(zhuǎn)為int剔氏,并加1得到1和10之間的數(shù),包含1和10
int x = (int)(Math.random()10)+1;
int y = (int)(Math.random()10)+1;
System.out.println(x);
System.out.println(y);
// 創(chuàng)建0-4隨機(jī)數(shù) 0 1 2 3 4 各表示加減乘除取模
int z = (int) (int)(Math.random()*5);
System.out.println(z);
switch (z) {
case 0:
System.out.println(x + "+" + y + "=?");
System.out.println("哥們快猜竹祷。谈跛。。塑陵。");
Thread.sleep(2000);
System.out.println(x + "+" + y + "=" + (x + y));
break;
case 1:
System.out.println(x + "-" + y + "=?");
System.out.println("哥們快猜感憾。。令花。阻桅。");
Thread.sleep(2000);
System.out.println(x + "-" + y + "=" + (x - y));
break;
case 2:
System.out.println(x + "*" + y + "=?");
System.out.println("哥們快猜。兼都。嫂沉。。");
Thread.sleep(2000);
System.out.println(x + "*" + y + "=" + (x * y));
break;
case 3:
System.out.println(x + "/" + y + "=?");
System.out.println("哥們快猜扮碧。趟章。。慎王。");
Thread.sleep(2000);
System.out.println(x + "/" + y + "=" + (x / y));
break;
case 4:
System.out.println(x + "%" + y + "=?");
System.out.println("哥們快猜蚓土。。赖淤。蜀漆。");
Thread.sleep(2000);
System.out.println(x + "%" + y + "=" + (x % y));
break;
}
}
}
計(jì)算器2:上述中只能計(jì)算一次÷祝可以使用whileu循環(huán)來(lái)不停計(jì)算嗜愈。
程序生成了3個(gè)隨機(jī)數(shù)旧蛾,前兩個(gè)數(shù)參與運(yùn)算,第三個(gè)數(shù)用于匹配運(yùn)算符蠕嫁。要注意除數(shù)為0的情況锨天。
int x = (int)(Math.random()10)+1;
Math.random() 生成0-1之間的數(shù)字,double類型
Math.random()10 就是0-9之間的數(shù)剃毒,是double類型
(int)(Math.random()10)將double類型強(qiáng)轉(zhuǎn)成int類型病袄,去掉小數(shù)點(diǎn),便于計(jì)算赘阀。
(int)(Math.random()10)+1益缠,生成了1到10之間隨機(jī)數(shù)。
int z = (int) (int)(Math.random()*5);
生成0-4之間的數(shù)字基公,可以用0表示加幅慌,1表示減,2表示乘轰豆,3表示除胰伍,4表示取模
為了減慢程序,使用了Thread.sleep(2000); 讓程序等待一會(huì)酸休。
6 for 循環(huán)
1.格式:for(初始化表達(dá)式骂租;循環(huán)條件表達(dá)式;循環(huán)后的操作表達(dá)式)
{
執(zhí)行語(yǔ)句斑司;
}
2.定義需求: 想要打印5次helloworld
public static void main(String[] args) {
for (int x = 0; x < 5; x++) {
System.out.println("hello java");
}
}
3.for的執(zhí)行流程
for 知道要進(jìn)行循環(huán)渗饮,讀到x=0 的時(shí)候,在內(nèi)存中開(kāi)辟了空間,定義變量x 賦值為0宿刮。接著進(jìn)行條件判斷 x<5互站,為真,這個(gè)時(shí)候?qū)M足條件后執(zhí)行了循環(huán)體的內(nèi)容System.out.println("hello java");當(dāng)循環(huán)體執(zhí)行完畢之后,執(zhí)行x < 5;后的表達(dá)式即 x++ 糙置。x自增后變?yōu)榱? 云茸,再次進(jìn)行判斷 x<5 (int x=0 只執(zhí)行一次),如果為真就再次運(yùn)行System.out.println("hello java");如果為假谤饭,for循環(huán)結(jié)束标捺。
2、for 和while的區(qū)別
'public static void main(String[] args) {
for (int x = 0; x < 5; x++) {
System.out.println("hello java");
}
System.out.println(x);
//x cannot be resolved to a variable
int y = 0;
while (y < 5) {
System.out.println("hello world");
y++;
}
System.out.println(y);
}'
- 錯(cuò)誤
解釋 x 為什么會(huì)找不到,注意了變量的作用域,也就是變量的作用范圍揉抵。x 只在 for 循環(huán)的大括號(hào)內(nèi)有效,出了這個(gè)區(qū)域亡容,就無(wú)效了.在內(nèi)存中就消失了。x消失后,仍要訪問(wèn)它,肯定會(huì)報(bào)錯(cuò)的冤今。
y 就不一樣了闺兢,y 是定義在while 外的。while循環(huán)完畢仍有效 while的初始化 動(dòng)作在外邊,循環(huán)結(jié)束后y 仍然存在屋谭。
當(dāng)定義的y 只作為循環(huán)增量存在的話的脚囊,循環(huán)完畢后y就沒(méi)有用了,但是y還是占著一塊內(nèi)存桐磁。所以悔耘,如果定義的變量只作為循環(huán)增量存在的話,就用for 循環(huán)可以節(jié)約內(nèi)存我擂。
其實(shí)for 和while 是可以互換的衬以。
最后總結(jié)
1、for里面的兩個(gè)表達(dá)式運(yùn)行的順序校摩,初始化表達(dá)式只讀一次看峻,判斷循環(huán)條件,為真就執(zhí)行循環(huán)體衙吩,然后再執(zhí)行循環(huán)后的操作表達(dá)式互妓,接著繼續(xù)判斷循環(huán)條件,重復(fù)找個(gè)過(guò)程分井,直到條件不滿足為止车猬。
2霉猛、while與for可以互換尺锚,區(qū)別在于for為了循環(huán)而定義的變量在for循環(huán)結(jié)束時(shí)就在內(nèi)存中釋放。而while循環(huán)使用的變量在循環(huán)結(jié)束后還可以繼續(xù)使用惜浅。
3瘫辩、最簡(jiǎn)單無(wú)限循環(huán)格式:while(true) , for(;;),無(wú)限循環(huán)存在的原因是并不知道循環(huán)多少次,而是根據(jù)某些條件坛悉,來(lái)控制循環(huán)伐厌。推薦使用while(true)
'while(true){
}
for(;;){
}
for(;true;){
}
'
for 練習(xí):
- 獲取1-10的和,并打印裸影。
- 1-100之間 7的倍數(shù)的個(gè)數(shù),并打印挣轨。
public static void main(String[] args) {
// 獲取1到10的和1+2+3+4+5+6+7+8+9+10
int sum = 0;
for (int x = 1; x <= 10; x++) {
System.out.println((sum + x) + "=" + sum + "+" + x);
sum = sum + x;
}
System.out.println(sum);// 55
}
public static void main(String[] args) {
// 1-100之間 7的倍數(shù)的個(gè)數(shù),并打印。
int count = 0;
for (int x = 0; x <= 100; x++) {
if (x % 7 == 0) {
System.out.println(x);
count++;
}
}
System.out.println(count);
}
累加思想:通過(guò)變量記錄住循環(huán)操作后的結(jié)果轩猩;通過(guò)循環(huán)的形式.進(jìn)行累加的動(dòng)作卷扮。
計(jì)數(shù)器思想:通過(guò)一個(gè)變量記錄住數(shù)據(jù)的狀態(tài)變化,也是通過(guò)循環(huán)完成均践。
循環(huán)常見(jiàn)錯(cuò)誤:
多加分號(hào):在for括號(hào)后和循環(huán)體之間加分號(hào)是常見(jiàn)錯(cuò)誤晤锹。
錯(cuò)誤:
程序編譯運(yùn)行都可以通過(guò),只是不是我們想要的結(jié)果彤委。
for(int i=0;i<100;i++);{
System.out.println("hello ");
}
正確:
for(int i=0;i<100;i++){
System.out.println("hello ");
}
錯(cuò)誤鞭铆;是一個(gè)死循環(huán)
int i=0;
while(i<100);{
System.out.println("hello");
i++;
}
正確:
int i=0;
while(i<100){
System.out.println("hello");
i++;
}
語(yǔ)句的嵌套應(yīng)用
什么是嵌套形式,其實(shí)就是語(yǔ)句中還有語(yǔ)句焦影。
想要打印出矩形:
'public static void main(String[] args) {
for (int x = 0; x < 5; x++) {
System.out.println("*");
}
}
public static void main(String[] args) {
for (int x = 0; x < 5; x++) {
System.out.print("*");
}
}
這里用“”表示矩形的邊车遂。
public static void main(String[] args) {
for (int x = 0; x < 5; x++) {
for(int y=0;y<6;y++){
System.out.print("");
}
System.out.println();
}
}
forfor 嵌套for循環(huán)練習(xí)2
打印此種格式的圖案
****
***
**
*
public static void main(String[] args) {
for (int x = 5; x > 0; x--) {
for(int y=x;y>0;y--){
System.out.print("*");
}
System.out.println("");
}
}
練習(xí):
**
public static void main(String[] args) {
for (int x = 0; x < 5; x++) {
for (int y = 0; y <= x; y++) {
System.out.print("*");
}
System.out.println("");
}
}'
練習(xí):99乘法表
'public static void main(String[] args) {
for (int x = 1; x <= 9; x++) {
for (int y = 1; y <= x; y++) {
System.out.print(y + "*" + x + "=" + x * y + '\t');
}
System.out.println(" ");
}
}'
7 break封断、continue關(guān)鍵字
break關(guān)鍵字:break 語(yǔ)句用于終止最近的封閉循環(huán)或它所在的 switch 語(yǔ)句〔暗#控制傳遞給終止語(yǔ)句后面的語(yǔ)句(如果有的話)澄港。
適用:for循環(huán) 、 switch兩種循環(huán)語(yǔ)句柄沮。
break的用法:
- 單獨(dú)使用回梧。
- 與標(biāo)簽一起使用。(標(biāo)簽:即一個(gè)名字祖搓,滿足標(biāo)識(shí)符的條件即可)狱意。
使用細(xì)節(jié): 不要再break語(yǔ)句之后,編寫(xiě)其他語(yǔ)句拯欧,永遠(yuǎn)都執(zhí)行不到详囤,編譯報(bào)錯(cuò)。
continue關(guān)鍵字:語(yǔ)句將控制權(quán)傳遞給它所在的封閉迭代語(yǔ)句的下一次迭代镐作。(跳出本循環(huán)藏姐,執(zhí)行下一次循環(huán))。
適用于:while 该贾、 do while 羔杨、 for循環(huán)語(yǔ)句
使用細(xì)節(jié):
1. 如果continue出現(xiàn)在循環(huán)的末尾(最后一條語(yǔ)句),那么可以省略。
2. 如果continue出現(xiàn)在循環(huán)的第一條語(yǔ)句杨蛋,那么后面的語(yǔ)句都無(wú)法執(zhí)行兜材,所以編譯報(bào)錯(cuò)。
3. 可以結(jié)合標(biāo)記使用逞力。