本章目標(biāo)
1)分支語句
if-else if-else
switch
2)循環(huán)語句
for
while
do while
一硕蛹、if
1)最簡單的if
if(判斷條件){
條件為真執(zhí)行的語句塊
}
例子
@Test
public void test3(){
//在控制一行提示
System.out.println("請輸入一個(gè)整型的學(xué)員成績");
//接受鍵盤輸入
Scanner sc=new Scanner(System.in);
//得到學(xué)生成績
int score=sc.nextInt();
//輸出學(xué)生成績
System.out.println("您輸入的是:"+score);
//定義一個(gè)變量,用于將來存儲(chǔ)等級
char grade = 0 ;
//根據(jù)學(xué)員的分?jǐn)?shù)轉(zhuǎn)化成對應(yīng)的等級
//如果分?jǐn)?shù)>=85 那么他的等級為you
if(score>=85){
//執(zhí)行語句todo
grade='優(yōu)';
}
System.out.println("您此次考試的等級為"+grade);
//如果分?jǐn)?shù)>=70 <85 良
//如果分?jǐn)?shù)>60 <70 中
//如果分?jǐn)?shù)=60 及格
//如果<60 不及格
}
帶一個(gè)else的情況
if(條件滿足){
執(zhí)行滿足時(shí)的語句塊
}else{
如果不滿足就執(zhí)行這里的語句塊
}
if(score>=85){
//執(zhí)行語句todo
grade='優(yōu)';
}else{//其他情況
grade='否';
}
更復(fù)雜一些的
if(score>=85){
//執(zhí)行語句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("您此次考試的等級為"+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 語句
@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語句塊遇到break會(huì)跳出况凉,如果第一個(gè)選項(xiàng)break沒有寫进鸠,會(huì)順序向下執(zhí)行,直到遇到break為止
switch語句特點(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)簽位置闹瞧,開始順序執(zhí)行以后所有的程序代碼绑雄,而不管后面的case條件是否匹配,直到碰到break關(guān)鍵字或者結(jié)束switch語句的大括號為止
case之間與default沒有順序奥邮。先判斷所有的case万牺,沒有匹配的case執(zhí)行default。因此一般將default放在case后面洽腺。
switch語句停止的條件是遇到了break關(guān)鍵字或者結(jié)束switch語句的大括號脚粟。
課堂練習(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語句完成需求
傳統(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;
}
}
簡化方式:
@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="測試代碼";
可以用+連接多個(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("請輸入一個(gè)字符串");
//接受鍵盤輸入
Scanner sc=new Scanner(System.in);
//獲取鍵盤輸入的值
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("請輸入一個(gè)字符串");
//接受鍵盤輸入
Scanner sc=new Scanner(System.in);
//獲取鍵盤輸入的值
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)語句
for
while
do while
while 語法:
while(條件表達(dá)式){
執(zhí)行語句塊;
}
簡單例子:
@Test
public void test1(){
int i=0;
while(i<=3){
i++;
System.out.println(i);
}
}
學(xué)生練習(xí):
輸出1-100之間的偶數(shù)
第3章 39頁的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í)行語句塊
}while(條件表達(dá)式);
兩者區(qū)別:do...while無論如何都會(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頁的2道練習(xí)
第3章 39頁的第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)改寫從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ù)為用戶購買商品的價(jià)格特愿,計(jì)算用戶一共需要花費(fèi)的總金額。
public static void main(String[] args) {
int sum = 0;
for(int i=0;i<5;i++){
System.out.println("請輸入第"+(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ù),輸出“猜對了”俩由;反之毒嫡,輸出“沒猜到”。
例如:
隨機(jī)數(shù)為4幻梯,用戶輸入數(shù)為:2,3,4兜畸。輸出:猜對了
隨機(jī)數(shù)為4,用戶輸入數(shù)為:1,2,3碘梢。輸出:沒猜到
@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("猜對了");
}else{
System.out.println("沒猜到");
}
}
上面的程序,考慮 如果第一次或第二次就猜對煞躬,還有沒有必要執(zhí)行下一次肛鹏,如果沒有必須,如何及時(shí)中斷呢恩沛,用到了流程中斷在扰。
流程中斷
break; 退出循環(huán) 假設(shè)100次,第55次時(shí)复唤,調(diào)用了break,結(jié)束所有
continue; 跳過當(dāng)前這次健田,繼續(xù)下一次
課堂練習(xí):
用break改造剛才的程序
1)隨機(jī)產(chǎn)生一個(gè)10以內(nèi)的正整數(shù),用戶循環(huán)輸入三個(gè)整數(shù)佛纫,如果用戶輸入的整數(shù)包含隨機(jī)數(shù)妓局,輸出“猜對了”总放;反之,輸出“沒猜到”好爬。
例如:
隨機(jī)數(shù)為4局雄,用戶輸入數(shù)為:2,3,4。輸出:猜對了
隨機(jī)數(shù)為4存炮,用戶輸入數(shù)為:1,2,3炬搭。輸出:沒猜到
@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("猜對了");
}else{
System.out.println("沒猜到");
}
}
continue
//50個(gè)人循環(huán)做題穆桂,到編號為6的王振生處和25胡啟昊就跳過
//跳過當(dāng)次循環(huán)宫盔,進(jìn)行下一次,continue;
@Test
public void conTest(){
for(int i=1;i<=50;i++){
//如果這個(gè)數(shù)是6或者25就跳過
if(i==6||i==25){
continue;
}else{
//否則打印 第*號的人開始做題
System.out.println("第"+i+"號學(xué)生做題");
}
}
}
//從1-100報(bào)數(shù)享完,逢7和7的倍數(shù)跳過
@Test
public void test07(){
for(int i=1;i<=100;i++){
//跳過的邏輯
//個(gè)數(shù)上是7或者10位上是7 (i/1%10==7 || i/10%10==7)
if(i%7==0||i/1%10==7 || i/10%10==7){
System.out.println("跳過"+i);
continue;
}
System.out.println("應(yīng)該報(bào)的:"+i);
}
}
//用continue 顯示50以內(nèi)的奇數(shù)
@Test
public void test2(){
for(int i=0;i<=50;i++){
//偶數(shù)灼芭,跳過當(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;
}
}
}
百元百雞問題
/**
- 母雞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)過多少米糖耸?第10次反彈多高秘遏?
@Test
public void test2(){
//一球從100米高度自由落下,每次落地后反跳回原高度的一半嘉竟;再落下邦危,求它在第10次落地時(shí),共經(jīng)過多少米舍扰?第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):條件語句) [必做題]
*/
Scanner sc = new Scanner(System.in);
System.out.println("請輸入一個(gè)不多于5位的數(shù)");
int i = sc.nextInt();
// 如果這個(gè)數(shù)大于5位涉馁,直接就提示錯(cuò)誤
if (i > 99999||i<=0) {
System.out.println("輸入數(shù)值不合法");
} else {
// 解析萬位上的數(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("請輸入一個(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("請輸入一個(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í)为鳄,見只剩下一個(gè)桃子了局嘁。求第一天共摘了多少溉箕。
@Test
public void homework02(){
/* 猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半悦昵,還不癮肴茄,又多吃了一個(gè),
第二天早上又將剩下的桃子吃掉一半但指,又多吃了一個(gè)寡痰。
以后每天早上都吃了前一天剩下的一半零一個(gè)。
到第10天早上想再吃時(shí)棋凳,見只剩下一個(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);}