第3章 流程控制语句(12课时)

2020-01-03  本文已影响0人  wqjcarnation

本章目标

1)分支语句
if-else if-else
switch

2)循环语句
for
while
do while

一、if
1)最简单的if
if(判断条件){
条件为真执行的语句块
}

例子
@Test
public void test3(){
//在控制一行提示

System.out.println("请输入一个整型的学员成绩");

//接受键盘输入
Scanner sc=new Scanner(System.in);
//得到学生成绩
int score=sc.nextInt();
//输出学生成绩
System.out.println("您输入的是:"+score);
//定义一个变量,用于将来存储等级
char grade = 0 ;
//根据学员的分数转化成对应的等级
//如果分数>=85 那么他的等级为you
if(score>=85){
//执行语句todo
grade='优';
}
System.out.println("您此次考试的等级为"+grade);
//如果分数>=70 <85 良
//如果分数>60 <70 中
//如果分数=60 及格
//如果<60 不及格
}

带一个else的情况
if(条件满足){
执行满足时的语句块
}else{
如果不满足就执行这里的语句块
}

if(score>=85){
//执行语句todo
grade='优';
}else{//其他情况
grade='否';
}

更复杂一些的

if(score>=85){
//执行语句todo
grade='优';
}else if(score>=70){//如果分数>=70,良
grade='良';
}else if(score>60){//如果分数>60
grade='中';

}

System.out.println("您此次考试的等级为"+grade);

练习 :学生补全其他逻辑

//如果分数=60 及

//如果<60 差

课堂练习:闰年

@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表达式支持的类型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没有写,会顺序向下执行,直到遇到break为止

switch语句特点:
表达式的值只可以接受int、byte、char、short 、String型,不接受其他类型的值

表达式的值接受String类型只在JDK7及以后版本有效

switch case中的值必须要与switch表达式的值具有相同的数据类型。而且case后跟的值必须是常量,不能跟变量。

不允许有重复的case取值

switch一旦碰到第一次case匹配,程序就会跳转到这个标签位置,开始顺序执行以后所有的程序代码,而不管后面的case条件是否匹配,直到碰到break关键字或者结束switch语句的大括号为止

case之间与default没有顺序。先判断所有的case,没有匹配的case执行default。因此一般将default放在case后面。

switch语句停止的条件是遇到了break关键字或者结束switch语句的大括号。

课堂练习:
如果月份month为1—12的一个月份,输出该月份的天数;如果数字不符合,输出“错误的月份”。

1、3、5、7、8、10、12月天数为31

2月天数为28

4、6、9、11月天数为30

使用switch语句完成需求

传统方式

@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区别: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);

}

作业:

第3章课后习题必做题1-9

生成随机数
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

//(数据类型)(最小值+Math.random()*(最大值-最小值+1))

System.out.println(10+new Random().nextInt(20-10+1));

}

循环语句
for

while

do while

while 语法:

while(条件表达式){

执行语句块;

}

简单例子:

@Test

public void test1(){

int i=0;

while(i<=3){

i++;

System.out.println(i);

}

}

学生练习:

输出1-100之间的偶数

第3章 39页的2题

@Test

public void test2(){

//计算1-100之间的和

//做一个计数器count

int count=0;

int i=1;

//循环1-100之间的数

//每循环到一个数,把他加到count里

while(i<=100){

//count=count+i;

count+=i;

i++;

}

System.out.println(count);

}

//1-100之间的数,打印数里含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{

执行语句块

}while(条件表达式);

两者区别:do...while无论如何都会执行一次。

代码如下:

@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之间的奇数和

作业:
第3章 31页的2道练习

第3章 39页的第3题

课后习题1-8

for循环
for(初始化循环变量;条件表达式;循环之后的操作 ){

do sth;

}

课堂演示:

用for循环打印1-100之间的整数

for(int i=1;i<=100;i++){

System.out.println(i);

}

学生练习:

1)用for循环打印1-100的奇数

2)用for循环改写从1到100的所有奇数相加的和

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)循环得到用户从控制台输入的5个整数,该整数为用户购买商品的价格,计算用户一共需要花费的总金额。

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)随机产生一个10以内的正整数,用户循环输入三个整数,如果用户输入的整数包含随机数,输出“猜对了”;反之,输出“没猜到”。

例如:

随机数为4,用户输入数为:2,3,4。输出:猜对了

随机数为4,用户输入数为:1,2,3。输出:没猜到

@Test

public void forTest03(){

//首先生成一个10以内的整数

int shuiji=new Random().nextInt(10);

System.out.println("随机数"+shuiji);

//标识用户是否猜中

boolean chaizhong=false;

Scanner sc=new Scanner(System.in);

//循环三次

for(int i=1;i<=3;i++){

//提示用户猜

System.out.println("猜");

int chai=sc.nextInt();

if(shuiji==chai){

chaizhong=true;

}

}

//三次循环之后,判定时用户是否猜中

if(chaizhong){

System.out.println("猜对了");

}else{

System.out.println("没猜到");

}

}

上面的程序,考虑 如果第一次或第二次就猜对,还有没有必要执行下一次,如果没有必须,如何及时中断呢,用到了流程中断。

流程中断
break; 退出循环 假设100次,第55次时,调用了break,结束所有

continue; 跳过当前这次,继续下一次

课堂练习:

用break改造刚才的程序

1)随机产生一个10以内的正整数,用户循环输入三个整数,如果用户输入的整数包含随机数,输出“猜对了”;反之,输出“没猜到”。

例如:

随机数为4,用户输入数为:2,3,4。输出:猜对了

随机数为4,用户输入数为:1,2,3。输出:没猜到

@Test

public void forTest03(){

//首先生成一个10以内的整数

int shuiji=new Random().nextInt(10);

System.out.println("随机数"+shuiji);

//标识用户是否猜中

boolean chaizhong=false;

Scanner sc=new Scanner(System.in);

//循环三次

for(int i=1;i<=3;i++){

//提示用户猜

System.out.println("猜");

int chai=sc.nextInt();

if(shuiji==chai){

chaizhong=true;

//中止整个循环

break;

}

}

//三次循环之后,判定时用户是否猜中

if(chaizhong){

System.out.println("猜对了");

}else{

System.out.println("没猜到");

}

}

continue
//50个人循环做题,到编号为6的王振生处和25胡启昊就跳过

//跳过当次循环,进行下一次,continue;

@Test

public void conTest(){

for(int i=1;i<=50;i++){

//如果这个数是6或者25就跳过

if(i==6||i==25){

continue;

}else{

//否则打印 第*号的人开始做题

System.out.println("第"+i+"号学生做题");

}

}

}

//从1-100报数,逢7和7的倍数跳过

@Test
public void test07(){
  for(int i=1;i<=100;i++){
      //跳过的逻辑
      //个数上是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("应该报的:"+i);
  }
}

//用continue 显示50以内的奇数

@Test

public void test2(){

for(int i=0;i<=50;i++){

//偶数,跳过当前这个,执行下一个

if(i%2==0){

continue;

}else{

System.out.println(i);

}

}

}

死循环
while(true){

}

do{

}while(true)

for循环

for(;;){

}

for(int i=0;;i++){

}

@Test

public void test3(){

for(int i=1;;i++){

System.out.println(i);

}

}

课堂练习:

//分别用for while计算从1-n之间的和,如果和大于5000时,打印此时的数值,停止

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++;

}

}

}

循环嵌套
练习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循环是从1-9

//里层的循环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的最小质数

@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;

}

}

}

百元百鸡问题

/**

*/

@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("母鸡数"+i);

System.out.println("公鸡数 "+j);

System.out.println("小鸡数"+m);

System.out.println("--------- ");

count++;

}

}

}

System.out.println("一共"+count+"种组合");

}

结果:

母鸡数6

公鸡数 10

小鸡数84


母鸡数13

公鸡数 5

小鸡数82


母鸡数20

公鸡数 0

小鸡数80


一共3种组合

练习2)一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

@Test

public void test2(){

//一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

double sum=100.00;

//原始高度

double h=100.00;

//循环9次

for(int i=0;i<9;i++){

//先折半

h=h/2;

//总高度

sum=sum+h*2;

}

System.out.println("经历多少米="+sum);

System.out.println("第10次反弹多高"+h/2);

}

经历多少米=299.609375

第10次反弹多高0.09765625

3.)打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各个位 的数字的立方和等于该数本身。

@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;

}

则执行完该程序段后total的值为:( )。

A、0 B、1 C、3 D、6

作业:

1)continue label 学习

  1. 判断2064年是不是闰年。

闰年判断规则:

能被400整除的是闰年

能被100整除,不能被400整除的不是闰年

能被4整除,不能被100整除的是闰年

其他的不是闰年

课后作业第9题

@Test

public void homework09() {

/**

*/

Scanner sc = new Scanner(System.in);

System.out.println("请输入一个不多于5位的数");

int i = sc.nextInt();

// 如果这个数大于5位,直接就提示错误

if (i > 99999||i<=0) {

System.out.println("输入数值不合法");

} else {

// 解析万位上的数

int wan = i / 10000 % 10;

// 解析千位上的数

int qian = i / 1000 % 10;

// 解析百位上的数

int bai = i / 100 % 10;

// 解析十位上的数

int shi = i / 10 % 10;

// 解析个位上的数

int ge = i % 10;

if (wan > 0) {

System.out.println("5位数" + wan + "" + qian + "" + bai + "" + shi + "" + ge);

} else if (qian > 0) {

System.out.println("4位数" + qian + "" + bai + "" + shi + "" + ge);

} else if (bai > 0) {

System.out.println("3位数" + bai + "" + shi + "" + ge);

} else if (shi > 0) {

System.out.println("2位数" + shi + "" + ge);

} else if (ge > 0) {

System.out.println("1位数" + ge);

}

}

}

另外一种方法

@Test

public void test10(){

//5、有一个不多于5位的正整数,求它是几位数,分别打印出每一位数字。

Scanner sc=new Scanner(System.in);

System.out.println("请输入一个5位以内的数");

int i=sc.nextInt();

int count=0;

while(i!=0){

int wei=i%10;//153-3 15-5 1-1

System.out.println("每位上的数"+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位以内的数");

int i=sc.nextInt();

int j=i,k=i;//用两个临时变量把i暂存到他那儿

int sum=0;

int n=0;//记录一共执行了几次

//一共几位

while(i!=0){

i=i/10;//每次把上一次的结果除以10

n++;

}

System.out.println("一共几位:"+n);

System.out.println(j);

//每位上的数是多少,以及count次方

while(j!=0){

int wei=j%10;//每位上的数

System.out.println("每位上的数:"+wei);

j=j/10;

sum+=Math.pow(wei, n);

}

//和原数进行比较

if(k==sum){

System.out.println(k+"是自幂数");

}else{

System.out.println(k+"不是自幂数");

}

}

课后习题

第2题: 猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,

           第二天早上又将剩下的桃子吃掉一半,又多吃了一个。

           以后每天早上都吃了前一天剩下的一半零一个。

           到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

@Test

public void homework02(){

/* 猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,

第10天剩余桃数:1

第9天剩余桃数: x/2-1=1 x=(1+1)*2=4

第8天剩余桃数: x/2-1=4 x=(4+1)*2=10

第10天剩余桃数:1 sum=1

第9天剩余桃数:(1+1)2=4 sum=(sum+1)2=4

第8天剩余桃数:(4+1)2=10 sum=(sum+1)2=10

第7天剩余桃数:(10+1)*2=22

第6天剩余桃数:(22+1)*2=46

规律很明显,即每天剩余的桃数是第二天桃数加1的两倍

*/

//第10天时的桃子数

int sum=1;

//循环九次

for(int i=0;i<9;i++){

sum=(sum+1)*2;

}System.out.println(sum);}

上一篇下一篇

猜你喜欢

热点阅读