Java学习笔记(8)——流程控制

这里将自己学习java及其应用的一些笔记、积累分享一下,如果涉及到了文章、文字侵权,请联系我删除或调整。


  • if
  • switch
  • for
  • while
  • do-while

一、if

1.1 概述

if( 条件 ) {
代码
}
if( 条件 ) {
代码 1
} else {
代码 2
}
if( 条件 1) {
代码 1
} else if( 条件 2) {
代码 2
} else if( 条件 3) {
代码 3
} else {
代码 4
}

二、switch

2.1 概述

  • switch只能判断:

byte,short,char,int

enum 枚举

jdk 1.7 String

  • case

必须写字面值,或常量

  • 一个case成立,从这个case,向后穿透所有case,包括default,直到结束,或者遇到 break中断、跳出switch
switch( 变量或表达式 ) {
case 30:
case 10:
break;// 中断、跳出
case 50:
case 90:
default:
}

2.2 练习:手机选号

尾数8,50
尾数4,免费
其他,20
项目:手机选号
类:day0303.Test1
package day0303;

import java.util.Scanner;

public class Test1 {

 public static void main(String[] args) {
 System.out.println("输入手机号:");
 String s = new Scanner(System.in).nextLine();
 
 //调用f()方法,把s的值,传递到f()方法中,计算价格
 f(s);
 }//main结束
 
 static void f(String tel) {
 //tel的长度,必须是11
 if(tel.length() != 11) {
 System.out.println("号码格式错误");
 return;//结束方法,返回到调用位置再继续执行
 }

 /*
 * tel = "2313123123"
 * 取最后一个字符
 * char c = tel.charAt(10)
 */
 //取第11个字符,它的下标位置是10
 char c = tel.charAt(10);
 //用来保存最终结果的变量 price
 int price = 0;
 //根据c字符的值,来为price重新赋值
 switch(c) {
 case '8': price=50; break;
 case '4': price=0; break;
 default: price=20;
 }
 
 //显示价格
 System.out.println("价格:"+price);
 
 }
}

三、for循环

3.1 概述

for( 变量赋值 ; 执行条件 ; 变量修改 ) {
       代码
}
例如:打印 1 10
for(int i=1; i<=10; i++) {
     System.out.println(i);
}

3.2 练习

package day0304;

public class Test1 {

 public static void main(String[] args) {
 System.out.println("\n\n--1到10-----------");
 f1();
 System.out.println("\n\n--10到1-----------");
 f2();
 System.out.println("\n\n--2,4,6,8,10-----------");
 f3();
 System.out.println("\n\n--8,88,888,8888...888888888-----------");
 f4();
 System.out.println("\n\n--死循环1,2,3...-----------");
 f5();
 }

 private static void f1() {
 for(int i=1; i<=10; i++) {
 System.out.println(i);
 }
 }

 private static void f2() {
 for(int i=10; i>=1; i--) {
 System.out.println(i);
 }
 }

 private static void f3() {
 for(int i=2; i<=10; i += 2) {
 System.out.println(i);
 }
 }

 private static void f4() {
 for(long i=8; i<=888888888; i=i*10+8) {
 System.out.println(i);
 }
 }

 private static void f5() {
 for(int i=1; ;i++) {
 System.out.println(i);
 }
 } 
}

3.3 练习:鸡兔同笼

鸡兔共35只 共94只脚
鸡和兔各几只
穷举法
鸡 兔 
0 35
1 34
2 33
3 32
...
23 12
...
35 0
项目:鸡兔同笼
类:day0305.Test1

package day0305;

public class Test1 {

 public static void main(String[] args) {
 //鸡j: 0到35
 //兔t: 35到0
    for(int j=0,t=35; j<=35; j++,t--) {
    //脚的数量是94
    if(j*2 + t*4 == 94) {
       System.out.println("鸡:"+j+", 兔:"+t);
    }
   }
 } 
}

3.4 练习:阶乘

5!
5*4*3*2*1
0!
1
项目:阶乘
类:day0306.Test1

package day0306;

import java.util.Scanner;

public class Test1 {

 public static void main(String[] args) {
 System.out.print("输入整数,求阶乘:");
 int n = new Scanner(System.in).nextInt();
 
 //调用f()方法,把n的值传递到f()方法,求阶乘
 f(n);
 }
 private static void f(int n) {
 if(n<0) {
 System.out.println("无");
 return;//方法结束,返回到调用位置继续执行
 }
 if(n == 0) {
 System.out.println("0的阶乘:1");
 return;
 }
 /*
 * r = 5
 *
 * i
 * 4, r=r*i
 * 3, r=r*i
 * 2, r=r*i
 * 1, r=r*i
 */
 long r = n;
 for(int i=n-1; i>=1; i--) {
 r *= i;
 }
 System.out.println(n+"的阶乘:"+r);
 } 
}

四、循环嵌套

4.1 概述

for(int i=1; i<=3; i++) {
     for(char j='a'; j<='c'; j++) {
         i,j
     }
}
 
i j
1 a
1 b
1 c
2 a
2 b
2 c
3 a
3 b
3 c

4.2 练习:循环嵌套

day0304_for循环

package day0304;

import java.util.Scanner;

public class Test2 {
 
public static void main(String[] args) {
 System.out.println("\n\n--------------");
 f1();
 
 System.out.println("\n\n--------------");
 System.out.print("输入行数:");
 int n = new Scanner(System.in).nextInt();
 f2(n); //打印n行的正方形
 
 System.out.println("\n\n--------------");
 f3(n);
 }

 private static void f3(int n) {
 /*
 * i
 * 1 *
 * 2 **
 * 3 ***
 * 4 ****
 * n *****
 * 1234i j
 */
 for(int i=1; i<=n; i++) {
 //j循环从第1个星号,到第i个星号
 for(int j=1; j<=i; j++) {
 System.out.print("*");
 }
 System.out.println();//补换行
 }
 
 }

 private static void f2(int n) {
 /*
 * i
 * 1 *****
 * 2 *****
 * 3 *****
 * 4 *****
 * n *****
 * 1234n j
 */
 //i循环,从第1行,到第n行
 for(int i=1; i<=n; i++) {
 //j循环,从第2个星号,到第n个星号
 for(int j=1; j<=n; j++) {
 System.out.print("*");
 }
 System.out.println(); //补一个换行符
 }
 }

 private static void f1() {
 for(int i=1; i<=3; i++) {
 for(char j='a'; j<='c'; j++) {
 System.out.println(i+", "+j);
 }
 }
 } 

}

4.3 练习:商品打折

商品打折
满500,9折 满1000,85折 满2000,8折 满5000,7折
项目:day0401_商品打折
类:day0401.Test1

package day0401;

import java.util.Scanner;

public class Test1 {

 public static void main(String[] args) {
 System.out.print("原价:");
 double p = new Scanner(System.in).nextDouble();
 //调用f()方法,求实际价格
 f(p);
 }
 private static void f(double p) {
 //用来保存实际价格的变量
 double price = p;//默认是原价
 //根据原价 p,来为 price 赋值
 if(p>=5000) {
 price = p*0.7;
 } else if(p>=2000) {
 price = p*0.8;
 } else if(p>=1000) {
 price = p*0.85;
 } else if(p>=500) {
 price = p*0.9;
 }
 
 System.out.println("实际价格:"+price);
 } }

4.4 练习:100元买100只鸡

穷举法
穷举100元,可以买的所有组合
公鸡g 母鸡m 小鸡x 0 0 300
0 1 291
0 2 282
0 3 273
...
0 25 75
...
0 33 3 1 0 285
1 1 276
1 2 267
...
1 31 6 2 0 xxx
2 1 xxx
..
2 30 0
...
20 0 0
项目:百元买百鸡
类:Test1

package day0502;

public class Test1 {

 public static void main(String[] args) {
 /*
 百元买百鸡
 公鸡5元1只
 母鸡3元1只
 小鸡1元3只
 */
 //g循环,公鸡数量从0到20
 for(int g=0; g<=20; g++) {
 //买g只公鸡剩余的前
 int money = 100 -g*5;
 //money最多能买多少母鸡
 int max = money/3;
 //m循环,母鸡数量从0到max
 for(int m=0; m<=max; m++) {
 //money买了m只母鸡后,剩的钱全部买小鸡
 int x = (money -m*3) *3;
 //g+m+x,是不是100只
 if(g+m+x == 100) {
 System.out.println(g+", "+m+", "+x);
 }
 }
 }
 } 
}

4.5 练习:最大公约数、最小公倍数

项目:最大公约数最小公倍数
类:Test1

package day0501;

import java.util.Scanner;

public class Test1 {

 public static void main(String[] args) {
 System.out.println("输入两个整数:");
 int a = new Scanner(System.in).nextInt();
 int b = new Scanner(System.in).nextInt();
 
 int d = zdgys(a,b);
 long x = zxgbs(a,b);
 System.out.println("最大公约数:"+d);
 System.out.println("最小公倍数:"+x);
 }
 private static int zdgys(int a, int b) {
 int min = a<b ? a : b;
 for(int i=min; i>=1; i--) {
 //i能把a和b同时整除
 if(a%i==0 && b%i==0) {
 return i;
 }
 }
 //这句代码根本不会执行,
 //让编译可以通过
 return 0;
 }

 private static long zxgbs(int a, int b) {
 int max = a>b? a : b;
 for(long i=max; ;i+=max) {
 //i能同时被a和b整除
 if(i%a==0 && i%b==0) {
 return i;
 }
 }
 } 
}

五、break和continue

5.1 概述

  • break

中断、跳出 switch 和 循环

  • continue

继续进入循环下一轮执行

5.2 练习:break和continue

项目:break和continue
类:day0402.Test1

package day0402;

public class Test1 {

 public static void main(String[] args) {

 System.out.println("\n\n---------------");
 f1();
 System.out.println("\n\n---------------");
 f2();
 }

 private static void f1() {
 // 随机浮点数,[0,1)
 //double d = Math.random();
 //System.out.println(d);
 
 // >0.999
 //i变量用来计次
 for(int i=1; ;i++) {
 double d = Math.random();
 if(d>0.999) {
 System.out.println("第"+i+"次:"+d);
 break;
 }
 }
 
 //System.out.println("循环已经结束");
 }

 private static void f2() {
 //打印1到100,跳过尾数3,5,7
 for(int i=1;i<=100;i++) {
 int y = i%10;
 if(y==3 || y==5 || y==7) {
 continue;
 }
 System.out.println(i);
 }
 } 
}

六、循环命名

6.1 概述

  • 内层循环中,控制外层循环 break continue需要对外层循环命名
outer :
for() {
    for() {
         break outer ;
         continue outer ;
   }
}
输入一个整数,判断是否是质数
2,3,5,7,11,13,17,19,23...
项目:求质数
类:day0403.Test1

package day0403;

import java.util.Scanner;

public class Test1 {
 
public static void main(String[] args) {
 System.out.print("输入质数:");
 int n = new Scanner(System.in).nextInt();
 //调用f()方法,判断n的值是否是质数
 f(n);
 }

 private static void f(int n) {
 if(n<2) {
 System.out.println(n+"不是质数");
 return;
 }
 if(n == 2) {
 System.out.println("2是质数");
 return;
 }
 
 //在2到1+n开方范围,找能把n整除的值
 //找到,n不是质数
 //找不到,n是质数
 double max = 1+ Math.sqrt(n);
 for(int i=2; i<max; i++) {
 //n能不能被i整除
 if(n%i == 0) {
 System.out.println(n+"不是质数");
 return;
 }
 }
 //判断了所有的值,没有能整除的
 System.out.println(n+"是质数");
 } 
}
求n内质数的数量
Test2

package day0403;

import java.util.Scanner;

public class Test2 {

 public static void main(String[] args) {

 System.out.println(
 "输入整数n,求n内质数的数量");
 int n = new Scanner(System.in).nextInt();
 
 f(n);
 }

 private static void f(int n) {
 if(n<2) {
 System.out.println("没有质数");
 return;
 }
 if(n==2) {
 System.out.println("有1个质数");
 return;
 }
 //定义计数变量
 int count = 1;//已知有一个质数 
 outer: //从3到n寻找质数
 for(int i=3; i<=n ;i++) {
 //判断i是否是质数
 double max = 1+ Math.sqrt(i);
 for(int j=2; j<max; j++) {//在2到<max,找能把i整除的数
 if(i%j == 0) {//i被j整除,i不是质数
 //跳到i++,继续判断下一个i值
 continue outer;
 }
 }
 //内层j循环结束,i是质数
 count++;
 } 
 System.out.println(n+"内质数的数量:"+count);
 }
}

七、while与do-while

7.1 概述

  • 先判断,再执行

while(执行条件) {

  代码

}

  • 先执行,再判断 至少执行一次

do {

    代码

} while(执行条件);

7.2 练习:while循环

项目:while循环
类:day0404.Test1

package day0404;

public class Test1 {

 public static void main(String[] args) {

 System.out.println("\n\n----------------");
 f1();
 System.out.println("\n\n----------------");
 f2();
 }
 
 // >0.999
 private static void f1() {
 int i = 0;//用来计次
 double d = 0;//用来保存结果
 //当d不是需要的值,继续产生新的值
 while(d<=0.999) {
 d = Math.random();
 i++;
 }
 System.out.println("第"+i+"次:"+d);
 }

 private static void f2() {
 int i = 0;
 double d = 0;
 do {
 d = Math.random();
 i++;
 } while (d<=0.999);
 
 System.out.println("第"+i+"次:"+d);
 } 
}

八、for和while

8.1 概述

  • forwhile都可以互相代替
  • 固定的循环次数、数据规律变化,用for
已经产生了一个[1, 1001)范围的随机整数
请猜这个数是几
 285
猜:1 小
猜:999
大
猜:2 小
猜:285
对
项目:猜数字
类:day0405.Test1

package day0405;

import java.util.Random;
import java.util.Scanner;

public class Test1 {

 public static void main(String[] args) {
 //产生随机整数
 // 1+ [0, 1000) --> [1, 1001)
 // 1+ {0,1,2,3,4,5...999}
 int r = 1+ new Random().nextInt(1000);
 System.out.println(r); 
 System.out.println(
 "已经产生了一个[1, 1001)范围的随机整数");
 System.out.println("请猜这个数是几"); 
 while(true) {
 System.out.print("猜:");
 int c = new Scanner(System.in).nextInt();
 if(c > r) {
 System.out.println("大");
 } else if(c < r) {
 System.out.println("小");
 } else {
 System.out.println("对");
 break;
 }
 }
 } 
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值