本章目標
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("請輸入一個整型的學員成績");
//接受鍵盤輸入
Scanner sc=new Scanner(System.in);
//得到學生成績
int score=sc.nextInt();
//輸出學生成績
System.out.println("您輸入的是:"+score);
//定義一個變量,用于將來存儲等級
char grade = 0 ;
//根據(jù)學員的分數(shù)轉化成對應的等級
//如果分數(shù)>=85 那么他的等級為you
if(score>=85){
//執(zhí)行語句todo
grade='優(yōu)';
}
System.out.println("您此次考試的等級為"+grade);
//如果分數(shù)>=70 <85 良
//如果分數(shù)>60 <70 中
//如果分數(shù)=60 及格
//如果<60 不及格
}
帶一個else的情況
if(條件滿足){
執(zhí)行滿足時的語句塊
}else{
如果不滿足就執(zhí)行這里的語句塊
}
if(score>=85){
//執(zhí)行語句todo
grade='優(yōu)';
}else{//其他情況
grade='否';
}
更復雜一些的
if(score>=85){
//執(zhí)行語句todo
grade='優(yōu)';
}else if(score>=70){//如果分數(shù)>=70,良
grade='良';
}else if(score>60){//如果分數(shù)>60
grade='中';
}
System.out.println("您此次考試的等級為"+grade);
練習 :學生補全其他邏輯
//如果分數(shù)=60 及
//如果<60 差
課堂練習:閏年
@Test
publicvoidtest2(){
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表達式支持的類型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("哥們,你選錯了");
break;
}
}
case語句塊遇到break會跳出狂丝,如果第一個選項break沒有寫,會順序向下執(zhí)行皂林,直到遇到break為止
switch語句特點:
表達式的值只可以接受int原探、byte乱凿、char、short 咽弦、String型徒蟆,不接受其他類型的值
表達式的值接受String類型只在JDK7及以后版本有效
switch case中的值必須要與switch表達式的值具有相同的數(shù)據(jù)類型。而且case后跟的值必須是常量型型,不能跟變量段审。
不允許有重復的case取值
switch一旦碰到第一次case匹配,程序就會跳轉到這個標簽位置闹蒜,開始順序執(zhí)行以后所有的程序代碼寺枉,而不管后面的case條件是否匹配,直到碰到break關鍵字或者結束switch語句的大括號為止
case之間與default沒有順序绷落。先判斷所有的case姥闪,沒有匹配的case執(zhí)行default。因此一般將default放在case后面砌烁。
switch語句停止的條件是遇到了break關鍵字或者結束switch語句的大括號筐喳。
課堂練習:
如果月份month為1—12的一個月份,輸出該月份的天數(shù)函喉;如果數(shù)字不符合疏唾,輸出“錯誤的月份”。
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("錯誤的月份");
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("錯誤的月份");
break;
}
}
String 類型(字符串)
String s="測試代碼";
可以用+連接多個字符串
next nextLine區(qū)別:next()遇到空格即結束啤握,nextLine() 可以接受一整行輸入,中間可以有空格晶框,直到你回車他才認為是結束
@Test
public void test3() {
// switch case default
// switch表達式支持的類型char byte short int jdk1.7之后支持字符串
System.out.println("請輸入一個字符串");
//接受鍵盤輸入
Scanner sc=new Scanner(System.in);
//獲取鍵盤輸入的值
String s=sc.next();
System.out.println(s);
}
@Test
public void test4() {
// switch case default
// switch表達式支持的類型char byte short int jdk1.7之后支持字符串
System.out.println("請輸入一個字符串");
//接受鍵盤輸入
Scanner sc=new Scanner(System.in);
//獲取鍵盤輸入的值
String s=sc.nextLine();
System.out.println(s);
}
作業(yè):
第3章課后習題必做題1-9
生成隨機數(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(條件表達式){
執(zhí)行語句塊;
}
簡單例子:
@Test
public void test1(){
int i=0;
while(i<=3){
i++;
System.out.println(i);
}
}
學生練習:
輸出1-100之間的偶數(shù)
第3章 39頁的2題
@Test
public void test2(){
//計算1-100之間的和
//做一個計數(shù)器count
int count=0;
int i=1;
//循環(huán)1-100之間的數(shù)
//每循環(huán)到一個數(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(條件表達式);
兩者區(qū)別:do...while無論如何都會執(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);
}
課堂練習:
用do...while 計算1-100之間的奇數(shù)和
作業(yè):
第3章 31頁的2道練習
第3章 39頁的第3題
課后習題1-8
for循環(huán)
for(初始化循環(huán)變量;條件表達式;循環(huán)之后的操作 ){
do? sth;
}
課堂演示:
用for循環(huán)打印1-100之間的整數(shù)
for(int i=1;i<=100;i++){
System.out.println(i);
}
學生練習:
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)得到用戶從控制臺輸入的5個整數(shù)蹲蒲,該整數(shù)為用戶購買商品的價格番甩,計算用戶一共需要花費的總金額。
public static void main(String[] args) {
int sum = 0;
for(int i=0;i<5;i++){
System.out.println("請輸入第"+(i+1)+"個商品價格:");
int x = new Scanner(System.in).nextInt();
sum += x;
}
System.out.println(sum);
}
4)隨機產(chǎn)生一個10以內(nèi)的正整數(shù)届搁,用戶循環(huán)輸入三個整數(shù)缘薛,如果用戶輸入的整數(shù)包含隨機數(shù),輸出“猜對了”卡睦;反之宴胧,輸出“沒猜到”。
例如:
隨機數(shù)為4表锻,用戶輸入數(shù)為:2,3,4恕齐。輸出:猜對了
隨機數(shù)為4,用戶輸入數(shù)為:1,2,3浩嫌。輸出:沒猜到
@Test
public void forTest03(){
//首先生成一個10以內(nèi)的整數(shù)
int shuiji=new Random().nextInt(10);
System.out.println("隨機數(shù)"+shuiji);
//標識用戶是否猜中
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)之后檐迟,判定時用戶是否猜中
if(chaizhong){
System.out.println("猜對了");
}else{
System.out.println("沒猜到");
}
}
上面的程序,考慮 如果第一次或第二次就猜對码耐,還有沒有必要執(zhí)行下一次追迟,如果沒有必須,如何及時中斷呢骚腥,用到了流程中斷敦间。
流程中斷
break;? 退出循環(huán) 假設100次,第55次時束铭,調(diào)用了break,結束所有
continue; 跳過當前這次廓块,繼續(xù)下一次
課堂練習:
用break改造剛才的程序
1)隨機產(chǎn)生一個10以內(nèi)的正整數(shù),用戶循環(huán)輸入三個整數(shù)契沫,如果用戶輸入的整數(shù)包含隨機數(shù)带猴,輸出“猜對了”;反之懈万,輸出“沒猜到”拴清。
例如:
隨機數(shù)為4,用戶輸入數(shù)為:2,3,4会通。輸出:猜對了
隨機數(shù)為4口予,用戶輸入數(shù)為:1,2,3。輸出:沒猜到
@Test
public void forTest03(){
//首先生成一個10以內(nèi)的整數(shù)
int shuiji=new Random().nextInt(10);
System.out.println("隨機數(shù)"+shuiji);
//標識用戶是否猜中
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)
break;
}
}
//三次循環(huán)之后涕侈,判定時用戶是否猜中
if(chaizhong){
System.out.println("猜對了");
}else{
System.out.println("沒猜到");
}
}
continue
//50個人循環(huán)做題沪停,到編號為6的王振生處和25胡啟昊就跳過
//跳過當次循環(huán),進行下一次,continue;
@Test
public void conTest(){
for(int i=1;i<=50;i++){
//如果這個數(shù)是6或者25就跳過
if(i==6||i==25){
continue;
}else{
//否則打印? 第*號的人開始做題
System.out.println("第"+i+"號學生做題");
}
}
}
//用continue 顯示50以內(nèi)的奇數(shù)
@Test
public void test2(){
for(int i=0;i<=50;i++){
//偶數(shù)木张,跳過當前這個众辨,執(zhí)行下一個
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);
}
}
課堂練習:
//分別用for while計算從1-n之間的和,如果和大于5000時窟哺,打印此時的數(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)嵌套
練習1)打印99表
@Test
publicvoiddoubleForTest(){
/*? ? 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();
}
}
課后習題:
選做題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+"種組合");
}
結果:
母雞數(shù)6
公雞數(shù) 10
小雞數(shù)84
母雞數(shù)13
公雞數(shù) 5
小雞數(shù)82
母雞數(shù)20
公雞數(shù) 0
小雞數(shù)80
一共3種組合
練習2)一球從100米高度自由落下泳挥,每次落地后反跳回原高度的一半;再落下至朗,求它在第10次落地時屉符,共經(jīng)過多少米?第10次反彈多高锹引?
@Test
public void test2(){
//一球從100米高度自由落下矗钟,每次落地后反跳回原高度的一半;再落下嫌变,求它在第10次落地時吨艇,共經(jīng)過多少米?第10次反彈多高腾啥?
doublesum=100.00;//原始高度doubleh=100.00;//循環(huán)9次for(inti=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ù)"是指一個三位數(shù),其各個位 的數(shù)字的立方和等于該數(shù)本身倘待。
@Test
public void test3(){
//從100-999
for(int i=100;i<=999;i++){
//首先得到百十個位? 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 學習
判斷2064年是不是閏年啊奄。
閏年判斷規(guī)則:
能被400整除的是閏年
能被100整除贿条,不能被400整除的不是閏年
能被4整除,不能被100整除的是閏年
其他的不是閏年
課后作業(yè)第9題
@Test
public void homework09() {
/**
有一個不多于5位的正整數(shù)增热,求它是幾位數(shù),分別打印出每一位數(shù)字胧辽。(知識點:條件語句) [必做題]
*/
Scanner sc = new Scanner(System.in);
System.out.println("請輸入一個不多于5位的數(shù)");
int i = sc.nextInt();
// 如果這個數(shù)大于5位峻仇,直接就提示錯誤
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;
// 解析個位上的數(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、有一個不多于5位的正整數(shù)邑商,求它是幾位數(shù)摄咆,分別打印出每一位數(shù)字凡蚜。
Scanner sc=new Scanner(System.in);
System.out.println("請輸入一個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("請輸入一個7位以內(nèi)的數(shù)");
int i=sc.nextInt();
int j=i,k=i;//用兩個臨時變量把i暫存到他那兒
int sum=0;
int n=0;//記錄一共執(zhí)行了幾次
//一共幾位
while(i!=0){
i=i/10;//每次把上一次的結果除以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ù)進行比較
if(k==sum){
System.out.println(k+"是自冪數(shù)");
}else{
System.out.println(k+"不是自冪數(shù)");
}
}
課后習題
第2題:? 猴子第一天摘下若干個桃子吭从,當即吃了一半朝蜘,還不癮,又多吃了一個涩金,
第二天早上又將剩下的桃子吃掉一半谱醇,又多吃了一個。? ? ? ? ? 以后每天早上都吃了前一天剩下的一半零一個步做。? ? ? ? ? 到第10天早上想再吃時副渴,見只剩下一個桃子了。求第一天共摘了多少全度。
@Test
public void homework02(){
/*? 猴子第一天摘下若干個桃子煮剧,當即吃了一半,還不癮将鸵,又多吃了一個勉盅,
第二天早上又將剩下的桃子吃掉一半,又多吃了一個顶掉。
以后每天早上都吃了前一天剩下的一半零一個草娜。
到第10天早上想再吃時,見只剩下一個桃子了一喘。求第一天共摘了多少驱还。
第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ù)
int sum=1;
//循環(huán)九次
for(int i=0;i<9;i++){
sum=(sum+1)*2;
}System.out.println(sum);}
轉至:↓↓↓
鏈接:http://www.reibang.com/p/7bf90d4ac293
來源:簡書
著作權歸作者所有凸克。商業(yè)轉載請聯(lián)系作者獲得授權议蟆,非商業(yè)轉載請注明出處。