一、for循环
1.1 语法
for (初始化;循环条件;条件变化控制){
循环体
}
for(int i = 1; i<=5; i++){
sout(i);
}
执行流程:
第一轮:
int i = 1; i<=5; ==>true; 执行输出,i++
第二轮:
i = 2, i<=5; ==>true; 执行输出,i++
第三轮:
i = 3, i<=5; ==>true; 执行输出,i++
第四轮:
i = 4, i<=5; ==>true; 执行输出,i++
第五轮:
i = 5, i<=5; ==>true; 执行输出,i++
第六轮:
i = 6, i<=5; ==>false; 结束循环
1.2 for循环练习题
输出练习
package com.shine.for666;
public class Demo03 {
public static void main(String[] args) {
/**
* 输出练习
* 1、输出1~100
* 2、输出1~100的奇数/偶数
* 3、输出100~1
* 4、输出a~z
* 5、输出Z~A
*/
// 3、输出100~1
for (int i = 100; i >= 1; i--) { // 从100开始,逐渐递减,只要大于等于1就能执行
System.out.println(i);
}
System.out.println("------------------");
// 4、输出a~z
for (int i = 97; i <= 122; i++) { // a~z对应的数字97~122
System.out.println((char) i);
}
}
}
计算练习
package com.shine.for666;
public class Demo04 {
public static void main(String[] args) {
/**
* 计算练习
* 1、计算1~100累加的结果
* 2、计算10!
* 3、计算1 + 1/2 + 1/3 + ... + 1/100
* 4、计算1 - 1/2 + 1/3 + ... - 1/100
*/
// 3、计算1 + 1/2 + 1/3 + ... + 1/100
double result = 1; // 统计累加的结果
for (double i = 1; i <= 100; i++) {
result *= 1/i;
}
System.out.println(result);
}
}
应用题
package com.shine.for666;
public class Demo05 {
public static void main(String[] args) {
/**
* 应用题
* 1、鸡兔同笼
* 2、水仙花数字
* 3、猴子摘桃
* 4、输出1000~2000之间的闰年,每一行5个
*/
/**
* 3、猴子摘桃
* 每天吃下全部桃子的一半 + 1,第十天结束发现还剩下1个
* 问最初摘下多少桃子?
*
* 第十天:
* (1+1)*2
* 第九天
* (4+1)*2
*
*/
int count = 1;
int day = 1; // 从第一天开始
while (day <= 10) { // 一共需要计算10天
// 每天桃子的数量: (这一天剩下的 + 1) * 2
count = (count+1) * 2;
day++; // 逐渐向前推进
}
System.out.println(count);
int num = 0; // 统计闰年的数量
for (int i = 1000; i <= 2000; i++) {
if ((i%400==0) || (i%4==0 && i%100!=0)) {
System.out.print(i + "\t");
// 每发现一个闰年,num自增1
num++;
// 每一次发现闰年之后判定num是否5的倍数
if (num % 5 == 0) {
// num是5--10--15--20、、、之类的数值
System.out.println();
}
}
}
System.out.println(num);
}
}
二、流程控制
2.1 概述
-
可以使用java中的一些关键字影响循环执行的流程
-
break
- 终止循环或者switch结构
-
continue
- 跳过本轮循环后面的内容,直接进入新的一轮循环
2.2 break
- 终止循环或者switch结构
package com.shine.for666;
public class Demo06 {
public static void main(String[] args) {
loop:for (int i = 0; i < 10; i++) {
System.out.println(i);
// 判定是否有6出现
if (i == 6) {
// 终止循环
break loop;
}
}
System.out.println("OVER");
}
}
2.3 continue
- 跳过本轮循环后面的内容,直接进入新的一轮循环
package com.shine.for666;
public class Demo07 {
public static void main(String[] args) {
/**
* continue
* 逢7过
*/
for (int i = 0; i < 10; i++) {
// 跳过偶数
if (i % 2 == 0) {
continue;
}
System.out.println(i);
}
System.out.println("OVER");
}
}
三、循环嵌套
3.1 概述
-
循环中的内容是其他的完整的循环
- 参见if嵌套
3.2 打印矩形
package com.shine.nest;
public class Demo01 {
public static void main(String[] args) {
/**
* * * * * * * * * *
*/
// 外层循环,控制执行的行数
for (int i = 0; i < 3; i++) {
// 内存循环,控制打印的列数
for (int j = 0; j < 16; j++) {
System.out.print("* ");
}
System.out.println();
}
}
}
3.3 99乘法表
package com.shine.nest;
public class Demo02 {
public static void main(String[] args) {
/**
*
* *
* * *
* * * *
* * * * *
行数 i j
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
j <= i
*/
for (int i = 1; i <= 9; i++) {
// 内层循环输出数据
for (int j = 1; j <= i; j++) {
System.out.print(j + "*" + i + "=" + i*j + "\t");
}
System.out.println();
}
}
}
补充:while循环实现乘法表
3.4 百鸡问题
package com.shine.nest;
public class Demo03 {
public static void main(String[] args) {
/**
* 百鸡问题--老王买鸡
* 公鸡5钱一只 1~20
* 母鸡3钱一只 1~33
* 小鸡1钱3只 3~99
* 一百钱买鸡一百只,问有几种组合?
*/
for (int g = 1; g < 20; g++) {
for (int m = 1; m < 33; m++) {
for (int x = 3; x < 100; x+=3) {
// 判定鸡的数量==100 && 钱的数量==100
if ((g+m+x==100) && (g*5+m*3+x/3==100)) {
System.out.println("公鸡:" + g + ",母鸡:" + m + ",小鸡:" + x);
}
}
}
}
}
}
3.5 ATM案例--丐版
package com.shine.nest;
import java.util.Scanner;
public class ATMDemo {
public static void main(String[] args) {
/**
* 模拟ATM操作账户的过程
*/
// 创建扫描器
Scanner sc = new Scanner(System.in);
int balance = 0; // 余额
int select; // 用户需要进行的操作选项
// 循环提示操作
do {
// 提示并获取用户的选择
System.out.println("欢迎光临红浪漫银行,请输入您需要的业务(1:开户2:存款3:取款4:转帐5:查询余额6:修改密码0:退出):");
select = sc.nextInt();
// 使用switch判定用户选择的操作
switch (select) {
case 2:
// 提示输入并获取存款金额
System.out.println("欢迎使用个存款功能,请输入存款金额:");
int saveMoney = sc.nextInt();
// 余额增加
balance += saveMoney;
System.out.println("存款成功...");
break;
case 3:
// 提示输入并获取取款金额
System.out.println("欢迎使用个取款功能,请输入取款金额:");
int takeMoney = sc.nextInt();
// 判定余额是否充足
if (balance >= takeMoney) {
// 余额减少
balance -= takeMoney;
System.out.println("取款成功...");
} else {
System.out.println("余额不足");
}
break;
case 5:
// 输出余额
System.out.println("账户金额:" + balance);
break;
default:
System.out.println("您选择的业务尚未开通...");
break;
}
} while (select != 0); // 如果选项不是0就一直执行
System.out.println("谢谢使用,期待您再次光临!!!");
}
}