本章目標(biāo)
1)分支語(yǔ)句
if-else if-else
switch
2)循環(huán)語(yǔ)句
for
while
do while
一、if
1)最簡(jiǎn)單的if
if(判斷條件){
條件為真執(zhí)行的語(yǔ)句塊
}
例子
@Test
public void test3(){
//在控制一行提示
System.out.println("請(qǐng)輸入一個(gè)整型的學(xué)員成績(jī)");
//接受鍵盤(pán)輸入
Scanner sc=new Scanner(System.in);
//得到學(xué)生成績(jī)
int score=sc.nextInt();
//輸出學(xué)生成績(jī)
System.out.println("您輸入的是:"+score);
//定義一個(gè)變量,用于將來(lái)存儲(chǔ)等級(jí)
char grade = 0 ;
//根據(jù)學(xué)員的分?jǐn)?shù)轉(zhuǎn)化成對(duì)應(yīng)的等級(jí)
//如果分?jǐn)?shù)>=85 那么他的等級(jí)為you
if(score>=85){
//執(zhí)行語(yǔ)句todo
grade='優(yōu)';
}
System.out.println("您此次考試的等級(jí)為"+grade);
//如果分?jǐn)?shù)>=70 <85 良
//如果分?jǐn)?shù)>60 <70 中
//如果分?jǐn)?shù)=60 及格
//如果<60 不及格
}
帶一個(gè)else的情況
if(條件滿足){
執(zhí)行滿足時(shí)的語(yǔ)句塊
}else{
如果不滿足就執(zhí)行這里的語(yǔ)句塊
}
if(score>=85){
//執(zhí)行語(yǔ)句todo
grade='優(yōu)';
}else{//其他情況
grade='否';
}
更復(fù)雜一些的
if(score>=85){
//執(zhí)行語(yǔ)句todo
grade='優(yōu)';
}else if(score>=70){//如果分?jǐn)?shù)>=70,良
grade='良';
}else if(score>60){//如果分?jǐn)?shù)>60
grade='中';
}
System.out.println("您此次考試的等級(jí)為"+grade);
練習(xí) :學(xué)生補(bǔ)全其他邏輯
//如果分?jǐn)?shù)=60 及
//如果<60 差
課堂練習(xí):閏年
@Test
public void test2(){
int year=2064;
if(year%400==0){//能被400整除的是閏年
System.out.println("是閏年");
}else if(year%4==0&&year%100!=0){//能被4整除顿乒,不能被100整除的是閏年
System.out.println("是閏年");
}else{//其他不是閏年
System.out.println("不是閏年");
}
}
二、switch 語(yǔ)句
@Test
public void test(){
//switch case default
switch表達(dá)式支持的類型char byte short int jdk1.7之后支持字符串
char c='e';
switch(c){
case 'a':
System.out.println("你選擇了a");
break;
case 'b':
System.out.println("你選擇了b");
break;
case 'c':
System.out.println("你選擇了c");
break;
case 'd':
System.out.println("你選擇了d");
break;
default:
System.out.println("哥們,你選錯(cuò)了");
break;
}
}
case語(yǔ)句塊遇到break會(huì)跳出譬巫,如果第一個(gè)選項(xiàng)break沒(méi)有寫(xiě),會(huì)順序向下執(zhí)行督笆,直到遇到break為止
switch語(yǔ)句特點(diǎn):
表達(dá)式的值只可以接受int芦昔、byte、char娃肿、short 咕缎、String型,不接受其他類型的值
表達(dá)式的值接受String類型只在JDK7及以后版本有效
switch case中的值必須要與switch表達(dá)式的值具有相同的數(shù)據(jù)類型料扰。而且case后跟的值必須是常量凭豪,不能跟變量。
不允許有重復(fù)的case取值
switch一旦碰到第一次case匹配晒杈,程序就會(huì)跳轉(zhuǎn)到這個(gè)標(biāo)簽位置嫂伞,開(kāi)始順序執(zhí)行以后所有的程序代碼,而不管后面的case條件是否匹配拯钻,直到碰到break關(guān)鍵字或者結(jié)束switch語(yǔ)句的大括號(hào)為止
case之間與default沒(méi)有順序帖努。先判斷所有的case,沒(méi)有匹配的case執(zhí)行default粪般。因此一般將default放在case后面拼余。
switch語(yǔ)句停止的條件是遇到了break關(guān)鍵字或者結(jié)束switch語(yǔ)句的大括號(hào)。
課堂練習(xí):
如果月份month為1—12的一個(gè)月份亩歹,輸出該月份的天數(shù)匙监;如果數(shù)字不符合寡润,輸出“錯(cuò)誤的月份”。
1舅柜、3、5躲惰、7致份、8、10础拨、12月天數(shù)為31
2月天數(shù)為28
4氮块、6、9诡宗、11月天數(shù)為30
使用switch語(yǔ)句完成需求
傳統(tǒng)方式
@Test
public void test09()
{
System.out.println("yuefen:");
Scanner sc=new Scanner(System.in);
int i=sc.nextInt();
switch (i) {
case 1:
System.out.println("31");
break;
case 2 :
System.out.println("28");
break;
case 3 :
System.out.println("31");
break;
case 4 :
System.out.println("30");
break;
case 5 :
System.out.println("31");
break;
case 6 :
System.out.println("30");
break;
case 7 :
System.out.println("31");
break;
case 8 :
System.out.println("31");
break;
case 9 :
System.out.println("30");
break;
case 10 :
System.out.println("31");
break;
case 11 :
System.out.println("30");
break;
case 12 :
System.out.println("31");
break;
default:
System.out.println("錯(cuò)誤的月份");
break;
}
}
簡(jiǎn)化方式:
@Test
public void test11()
{
System.out.println("yuefen:");
Scanner sc=new Scanner(System.in);
int i=sc.nextInt();
switch (i) {
case 1:
case 3:
case 5:
case 7 :
case 8 :
case 10 :
case 12 :
System.out.println("31");
break;
case 2 :
System.out.println("28");
break;
case 4 :
case 6 :
case 9 :
case 11 :
System.out.println("30");
break;
default:
System.out.println("錯(cuò)誤的月份");
break;
}
}
String 類型(字符串)
String s="測(cè)試代碼";
可以用+連接多個(gè)字符串
next nextLine區(qū)別:next()遇到空格即結(jié)束滔蝉,nextLine() 可以接受一整行輸入,中間可以有空格塔沃,直到你回車他才認(rèn)為是結(jié)束
@Test
public void test3() {
// switch case default
// switch表達(dá)式支持的類型char byte short int jdk1.7之后支持字符串
System.out.println("請(qǐng)輸入一個(gè)字符串");
//接受鍵盤(pán)輸入
Scanner sc=new Scanner(System.in);
//獲取鍵盤(pán)輸入的值
String s=sc.next();
System.out.println(s);
}
@Test
public void test4() {
// switch case default
// switch表達(dá)式支持的類型char byte short int jdk1.7之后支持字符串
System.out.println("請(qǐng)輸入一個(gè)字符串");
//接受鍵盤(pán)輸入
Scanner sc=new Scanner(System.in);
//獲取鍵盤(pán)輸入的值
String s=sc.nextLine();
System.out.println(s);
}
作業(yè):
第3章課后習(xí)題必做題1-9
生成隨機(jī)數(shù)
int i=new Random().nextInt(10);
System.out.println(i);
@Test
public void randomTest(){
//0-9
System.out.println(new Random().nextInt(10));
//1+(0-10)
System.out.println(1+new Random().nextInt(10-1+1));
//10-20
//(數(shù)據(jù)類型)(最小值+Math.random()*(最大值-最小值+1))
System.out.println(10+new Random().nextInt(20-10+1));
}
循環(huán)語(yǔ)句
for
while
do while
while 語(yǔ)法:
while(條件表達(dá)式){
執(zhí)行語(yǔ)句塊;
}
簡(jiǎn)單例子:
@Test
public void test1(){
int i=0;
while(i<=3){
i++;
System.out.println(i);
}
}
學(xué)生練習(xí):
輸出1-100之間的偶數(shù)
第3章 39頁(yè)的2題
@Test
public void test2(){
//計(jì)算1-100之間的和
//做一個(gè)計(jì)數(shù)器count
int count=0;
int i=1;
//循環(huán)1-100之間的數(shù)
//每循環(huán)到一個(gè)數(shù)蝠引,把他加到count里
while(i<=100){
//count=count+i;
count+=i;
i++;
}
System.out.println(count);
}
//1-100之間的數(shù),打印數(shù)里含7或者可以被7整除的
@Test
public void test06(){
int i=1;
while(i<=100){
if(i%7==0||i%10==7||i/10%10==7){
System.out.println(i);
}
i++;
}
}
do...while
do{
執(zhí)行語(yǔ)句塊
}while(條件表達(dá)式);
兩者區(qū)別:do...while無(wú)論如何都會(huì)執(zhí)行一次蛀柴。
代碼如下:
@Test
public void liHanfeng(){
int i=3;
while(i<3){
System.out.println("i="+i);
}
}
@Test
public void wangJy(){
int i=3;
do{
System.out.println("i="+i);
}
while(i<3);
}
課堂練習(xí):
用do...while 計(jì)算1-100之間的奇數(shù)和
作業(yè):
第3章 31頁(yè)的2道練習(xí)
第3章 39頁(yè)的第3題
課后習(xí)題1-8
for循環(huán)
for(初始化循環(huán)變量;條件表達(dá)式;循環(huán)之后的操作 ){
do sth;
}
課堂演示:
用for循環(huán)打印1-100之間的整數(shù)
for(int i=1;i<=100;i++){
System.out.println(i);
}
學(xué)生練習(xí):
1)用for循環(huán)打印1-100的奇數(shù)
2)用for循環(huán)改寫(xiě)從1到100的所有奇數(shù)相加的和
public static void main(String[] args) {
int sum = 0;
for(int i=1;i<=100;i++){
if(i%2!=0){
sum += i;
}
}
System.out.println(sum);
}
3)循環(huán)得到用戶從控制臺(tái)輸入的5個(gè)整數(shù)螃概,該整數(shù)為用戶購(gòu)買商品的價(jià)格,計(jì)算用戶一共需要花費(fèi)的總金額鸽疾。
public static void main(String[] args) {
int sum = 0;
for(int i=0;i<5;i++){
System.out.println("請(qǐng)輸入第"+(i+1)+"個(gè)商品價(jià)格:");
int x = new Scanner(System.in).nextInt();
sum += x;
}
System.out.println(sum);
}
4)隨機(jī)產(chǎn)生一個(gè)10以內(nèi)的正整數(shù)吊洼,用戶循環(huán)輸入三個(gè)整數(shù),如果用戶輸入的整數(shù)包含隨機(jī)數(shù)制肮,輸出“猜對(duì)了”冒窍;反之,輸出“沒(méi)猜到”豺鼻。
例如:
隨機(jī)數(shù)為4综液,用戶輸入數(shù)為:2,3,4。輸出:猜對(duì)了
隨機(jī)數(shù)為4儒飒,用戶輸入數(shù)為:1,2,3意乓。輸出:沒(méi)猜到
@Test
public void forTest03(){
//首先生成一個(gè)10以內(nèi)的整數(shù)
int shuiji=new Random().nextInt(10);
System.out.println("隨機(jī)數(shù)"+shuiji);
//標(biāo)識(shí)用戶是否猜中
boolean chaizhong=false;
Scanner sc=new Scanner(System.in);
//循環(huán)三次
for(int i=1;i<=3;i++){
//提示用戶猜
System.out.println("猜");
int chai=sc.nextInt();
if(shuiji==chai){
chaizhong=true;
}
}
//三次循環(huán)之后,判定時(shí)用戶是否猜中
if(chaizhong){
System.out.println("猜對(duì)了");
}else{
System.out.println("沒(méi)猜到");
}
}
上面的程序约素,考慮 如果第一次或第二次就猜對(duì)届良,還有沒(méi)有必要執(zhí)行下一次,如果沒(méi)有必須圣猎,如何及時(shí)中斷呢士葫,用到了流程中斷。
流程中斷
break; 退出循環(huán) 假設(shè)100次送悔,第55次時(shí)慢显,調(diào)用了break,結(jié)束所有
continue; 跳過(guò)當(dāng)前這次爪模,繼續(xù)下一次
課堂練習(xí):
用break改造剛才的程序
1)隨機(jī)產(chǎn)生一個(gè)10以內(nèi)的正整數(shù),用戶循環(huán)輸入三個(gè)整數(shù)荚藻,如果用戶輸入的整數(shù)包含隨機(jī)數(shù)屋灌,輸出“猜對(duì)了”;反之应狱,輸出“沒(méi)猜到”共郭。
例如:
隨機(jī)數(shù)為4,用戶輸入數(shù)為:2,3,4疾呻。輸出:猜對(duì)了
隨機(jī)數(shù)為4除嘹,用戶輸入數(shù)為:1,2,3。輸出:沒(méi)猜到
@Test
public void forTest03(){
//首先生成一個(gè)10以內(nèi)的整數(shù)
int shuiji=new Random().nextInt(10);
System.out.println("隨機(jī)數(shù)"+shuiji);
//標(biāo)識(shí)用戶是否猜中
boolean chaizhong=false;
Scanner sc=new Scanner(System.in);
//循環(huán)三次
for(int i=1;i<=3;i++){
//提示用戶猜
System.out.println("猜");
int chai=sc.nextInt();
if(shuiji==chai){
chaizhong=true;
//中止整個(gè)循環(huán)
break;
}
}
//三次循環(huán)之后岸蜗,判定時(shí)用戶是否猜中
if(chaizhong){
System.out.println("猜對(duì)了");
}else{
System.out.println("沒(méi)猜到");
}
}
continue
//50個(gè)人循環(huán)做題尉咕,到編號(hào)為6的王振生處和25胡啟昊就跳過(guò)
//跳過(guò)當(dāng)次循環(huán),進(jìn)行下一次璃岳,continue;
@Test
public void conTest(){
for(int i=1;i<=50;i++){
//如果這個(gè)數(shù)是6或者25就跳過(guò)
if(i==6||i==25){
continue;
}else{
//否則打印 第*號(hào)的人開(kāi)始做題
System.out.println("第"+i+"號(hào)學(xué)生做題");
}
}
}
//用continue 顯示50以內(nèi)的奇數(shù)
@Test
public void test2(){
for(int i=0;i<=50;i++){
//偶數(shù)年缎,跳過(guò)當(dāng)前這個(gè),執(zhí)行下一個(gè)
if(i%2==0){
continue;
}else{
System.out.println(i);
}
}
}
死循環(huán)
while(true){
}
do{
}while(true)
for循環(huán)
for(;;){
}
for(int i=0;;i++){
}
@Test
public void test3(){
for(int i=1;;i++){
System.out.println(i);
}
}
課堂練習(xí):
//分別用for while計(jì)算從1-n之間的和铃慷,如果和大于5000時(shí)晦款,打印此時(shí)的數(shù)值,停止
for:
public void test4(){
int count=0;
for(int i=1;;i++){
count+=i;
if(count>5000){
System.out.println(i);
break;
}
}
}
while1:
public void test5(){
int count=0;
int i=1;
while(true){
count+=i;
if(count>5000){
System.out.println(i);
break;
}else{
i++;
}
}
}
while2:
public void test6(){
int count=0;
int i=1;
boolean flag=true;
while(flag){
count+=i;
if(count>5000){
System.out.println(i);
flag=false;
}else{
i++;
}
}
}
循環(huán)嵌套
練習(xí)1)打印99表
@Test
public void doubleForTest(){
/* 1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9*/
//最外層的i循環(huán)是從1-9
//里層的循環(huán)j是從1---->i
for(int i=1;i<10;i++){
for(int j=1;j<=i;j++){
System.out.print(i+""+j+"="+ij+" ");
}
System.out.println();
}
}
課后習(xí)題:
選做題3 :求大于200的最小質(zhì)數(shù)
@Test
public void homework13() {
for (int i = 200; i <= 300; i++) {
boolean f = true;
for (int j = 2; j < i; j++) {
if (i % j == 0) {
f = false;
break;
}
}
if (f) {
System.out.println(i);
break;
}
}
}
百元百雞問(wèn)題
/**
- 母雞3元每只,公雞4元每只枚冗,小雞0.5元每只缓溅,如果花100元錢拨脉,想買100只雞瓷们,有多少種可能?
*/
@Test
public void xhTest01(){
int count=0;
for(int i=0;i<=33;i++){
for(int j=0;j<=25;j++){
int m=100-i-j;
if((i3+j4+m*0.5)==100&&i+j+m==100){
System.out.println("母雞數(shù)"+i);
System.out.println("公雞數(shù) "+j);
System.out.println("小雞數(shù)"+m);
System.out.println("--------- ");
count++;
}
}
}
System.out.println("一共"+count+"種組合");
}
結(jié)果:
母雞數(shù)6
公雞數(shù) 10
小雞數(shù)84
母雞數(shù)13
公雞數(shù) 5
小雞數(shù)82
母雞數(shù)20
公雞數(shù) 0
小雞數(shù)80
一共3種組合
練習(xí)2)一球從100米高度自由落下活玲,每次落地后反跳回原高度的一半股囊;再落下袜匿,求它在第10次落地時(shí),共經(jīng)過(guò)多少米稚疹?第10次反彈多高居灯?
@Test
public void test2(){
//一球從100米高度自由落下,每次落地后反跳回原高度的一半内狗;再落下怪嫌,求它在第10次落地時(shí),共經(jīng)過(guò)多少米柳沙?第10次反彈多高岩灭?
double sum=100.00;
//原始高度
double h=100.00;
//循環(huán)9次
for(int i=0;i<9;i++){
//先折半
h=h/2;
//總高度
sum=sum+h*2;
}
System.out.println("經(jīng)歷多少米="+sum);
System.out.println("第10次反彈多高"+h/2);
}
經(jīng)歷多少米=299.609375
第10次反彈多高0.09765625
3.)打印出所有的"水仙花數(shù)",所謂"水仙花數(shù)"是指一個(gè)三位數(shù)赂鲤,其各個(gè)位 的數(shù)字的立方和等于該數(shù)本身噪径。
@Test
public void test3(){
//從100-999
for(int i=100;i<=999;i++){
//首先得到百十個(gè)位 345
int bai=i/100;
int shi=i/10%10;
int ge=i%10;
if(baibaibai+shishishi+gegege==i){
System.out.println(i);
}
}
}
答案:
153
370
371
407
4)int total =0;
for ( int i = 0;i < 4; i++ ){
if ( i == 1) continue;
if ( i == 2) break;
total += i;
}
則執(zhí)行完該程序段后total的值為:( )柱恤。
A、0 B找爱、1 C梗顺、3 D、6
作業(yè):
1)continue label 學(xué)習(xí)
- 判斷2064年是不是閏年车摄。
閏年判斷規(guī)則:
能被400整除的是閏年
能被100整除寺谤,不能被400整除的不是閏年
能被4整除,不能被100整除的是閏年
其他的不是閏年
課后作業(yè)第9題
@Test
public void homework09() {
/**
- 有一個(gè)不多于5位的正整數(shù)练般,求它是幾位數(shù),分別打印出每一位數(shù)字锈候。(知識(shí)點(diǎn):條件語(yǔ)句) [必做題]
*/
Scanner sc = new Scanner(System.in);
System.out.println("請(qǐng)輸入一個(gè)不多于5位的數(shù)");
int i = sc.nextInt();
// 如果這個(gè)數(shù)大于5位薄料,直接就提示錯(cuò)誤
if (i > 99999||i<=0) {
System.out.println("輸入數(shù)值不合法");
} else {
// 解析萬(wàn)位上的數(shù)
int wan = i / 10000 % 10;
// 解析千位上的數(shù)
int qian = i / 1000 % 10;
// 解析百位上的數(shù)
int bai = i / 100 % 10;
// 解析十位上的數(shù)
int shi = i / 10 % 10;
// 解析個(gè)位上的數(shù)
int ge = i % 10;
if (wan > 0) {
System.out.println("5位數(shù)" + wan + "" + qian + "" + bai + "" + shi + "" + ge);
} else if (qian > 0) {
System.out.println("4位數(shù)" + qian + "" + bai + "" + shi + "" + ge);
} else if (bai > 0) {
System.out.println("3位數(shù)" + bai + "" + shi + "" + ge);
} else if (shi > 0) {
System.out.println("2位數(shù)" + shi + "" + ge);
} else if (ge > 0) {
System.out.println("1位數(shù)" + ge);
}
}
}
另外一種方法
@Test
public void test10(){
//5、有一個(gè)不多于5位的正整數(shù)泵琳,求它是幾位數(shù)摄职,分別打印出每一位數(shù)字。
Scanner sc=new Scanner(System.in);
System.out.println("請(qǐng)輸入一個(gè)5位以內(nèi)的數(shù)");
int i=sc.nextInt();
int count=0;
while(i!=0){
int wei=i%10;//153-3 15-5 1-1
System.out.println("每位上的數(shù)"+wei);
i=i/10;//每次舍去一位 15 1
count++;//1 2 3
}
System.out.println("一共幾位"+count);
}
@Test
public void test07(){
Scanner sc=new Scanner(System.in);
System.out.println("請(qǐng)輸入一個(gè)7位以內(nèi)的數(shù)");
int i=sc.nextInt();
int j=i,k=i;//用兩個(gè)臨時(shí)變量把i暫存到他那兒
int sum=0;
int n=0;//記錄一共執(zhí)行了幾次
//一共幾位
while(i!=0){
i=i/10;//每次把上一次的結(jié)果除以10
n++;
}
System.out.println("一共幾位:"+n);
System.out.println(j);
//每位上的數(shù)是多少获列,以及count次方
while(j!=0){
int wei=j%10;//每位上的數(shù)
System.out.println("每位上的數(shù):"+wei);
j=j/10;
sum+=Math.pow(wei, n);
}
//和原數(shù)進(jìn)行比較
if(k==sum){
System.out.println(k+"是自冪數(shù)");
}else{
System.out.println(k+"不是自冪數(shù)");
}
}
課后習(xí)題
第2題: 猴子第一天摘下若干個(gè)桃子谷市,當(dāng)即吃了一半,還不癮击孩,又多吃了一個(gè)迫悠,
第二天早上又將剩下的桃子吃掉一半,又多吃了一個(gè)巩梢。
以后每天早上都吃了前一天剩下的一半零一個(gè)创泄。
到第10天早上想再吃時(shí),見(jiàn)只剩下一個(gè)桃子了括蝠。求第一天共摘了多少鞠抑。
@Test
public void homework02(){
/* 猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半忌警,還不癮搁拙,又多吃了一個(gè),
第二天早上又將剩下的桃子吃掉一半法绵,又多吃了一個(gè)箕速。
以后每天早上都吃了前一天剩下的一半零一個(gè)。
到第10天早上想再吃時(shí)朋譬,見(jiàn)只剩下一個(gè)桃子了弧满。求第一天共摘了多少。
第10天剩余桃數(shù):1
第9天剩余桃數(shù): x/2-1=1 x=(1+1)*2=4
第8天剩余桃數(shù): x/2-1=4 x=(4+1)*2=10
第10天剩余桃數(shù):1 sum=1
第9天剩余桃數(shù):(1+1)2=4 sum=(sum+1)2=4
第8天剩余桃數(shù):(4+1)2=10 sum=(sum+1)2=10
第7天剩余桃數(shù):(10+1)*2=22
第6天剩余桃數(shù):(22+1)*2=46
規(guī)律很明顯此熬,即每天剩余的桃數(shù)是第二天桃數(shù)加1的兩倍
*/
//第10天時(shí)的桃子數(shù)
int sum=1;
//循環(huán)九次
for(int i=0;i<9;i++){
sum=(sum+1)*2;
}System.out.println(sum);}