/* for循环控制
基本语法
for(循环变量初始化;循环条件;循环变量迭代){
循环操作(可以多条语句)
}
//1.for是关键字,表示循环控制
2.四要素:(1)循环变量初始化(2)循环条件(3)循环操作(4)循环变量迭代
3.循环条件是返回一布尔值的表达式
4.for循环中的初始化和变量迭代可以写到其他地方,但两边分号不能省略
for(;;){//表示一个无限循环}
5.循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开
循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开
*/
/* 演示1:打印1~100之间所有是9的倍数的整数,统计个数及总和
思路分析:
一、化繁为简:
1.完成输出1-100的值
2.在输出中进行过滤,只输出9的倍数 i % 9 = 0
3.统计个数:定义变量int count = 0;当条件满足时 count++;
4.求总和,定义一个变量 int sum = 0;当条件满足时 sum += i;
二、先死后活:
1.为适应需求,把范围开始和结束的值做成变量
2.还可以更进一步,把9的倍数也做成变量
*/
public class Control2 {
public static void main(String[] args) {
int count = 0;
int sum = 0;
int start = 1;
int end = 100;
int t = 9;
for(int i = start; i <= end; i++){
if (i % t == 0) {
System.out.println("i=" + i);
count++;
sum += i;
}
}
System.out.println("count=" + count);
System.out.println("sum=" + sum);
}
}
/* 演示2:输出整数和为5的加法
思路分析:
一、化繁为简
1.先输出 0 ~ 5
2.找出规律进行拆分,后面加的时 5-i;
二、先死后活
1.把5替换成变量n
*/
public class Control2 {
public static void main(String[] args) {
int n = 5;
for(int i = 1; i <= n; i++) {
System.out.println(i + "+" + (n-i) + "=" + n);
}
}
}
/* while循环控制
基本语法
while(循环条件){
循环体(语句);
循环变量迭代;
}
//1.while循环也有四要素,只是位置和for不一样
2.循环条件是返回一个布尔值的表达式
3.while循环是先判断再执行语句
*/
// 演示3:打印1-100之间所有能被3整除的数
public class Control2 {
public static void main(String[] args) {
int i = 1;
int endi = 100;
while(i <= endi) {
if(i % 3 ==0) {
System.out.println(i);
}
i++;
}
}
}
*/
// 演示4:打印40-200之间所有的偶数
public class Control2 {
public static void main(String[] args) {
int j = 40;
int endj = 200
while(j <= endj) {
if(j % 2 == 0) {
System.out.println(j);
}
j++;
}
}
}
/* do-while循环控制
基本语法
循环变量初始化;
do{
循环体(语句);
循环变量迭代;
}while(循环条件);
//1.do while是关键字
2.也有循环四要素,循环条件也是返回一个布尔值
3.先执行在判断,所以至少执行一次
4.最后有一个分号;
*/
// 演示5:统计1-200之间能被5整除但不能被3整除的个数
public class Control2 {
public static void main(String[] args) {
int k = 1;
int count = 0;
do {
if(k % 5 ==0 && k % 3 !=0){
System.out.println(k);
count++;
}
k++;
}while(k <=200);
System.out.println("count=" + count);
}
}
/* 多重循环控制
1.将一个循环放在另一个循环体内,就形成了嵌套循环。其中for,while,do-while均可以作为
外层循环和内层循环。一般不超过3层,否则可读性很差
2.实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,
才会完全跳出内层循环,才可结束外层的当次循环,开始下一次循环
3.设外层循环次数为m次,内层为n次,则内层循环需要执行m*n次
for(int i = 1;i <= 7;i++){ //第一层循环 7次
for(int j = 1;j <= 2;j++){ //第二层循环 2次
System.out.println("i=" + i + "j=" + j); //共循环7*2=14
}
}
*/
/* 演示6:统计3个班的成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的平均分(成绩键盘输入)
并统计三个班及格人数
思路分析:
1.先统计1个班,5个学生的成绩 使用for
1.1创建Scanner对象,接收用户输入
1.2得到该班级的平均分,定义 double sum 把成绩全部累计
2.统计3个班的平均分 i表示班级,j表示学生
3.所有班级的平均分
3.1定义变量 double totalScore 累计所有成绩
3.2当多重循环结束时,totalScore/3
4.统计三个班及格人数
4.1定义变量 int passNum = 0;当学生成绩 >=60,passNum++,使用if
*/
import java.util.Scanner;
public class Control2 {
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
double totalScore = 0;
int passNum = 0;
for(int i = 1; i <= 3;i++){
double sum = 0;
for(int j = 1;j <= 5;j++) {
System.out.println("请输入第" + i + "个班的第" + j + "个学生的成绩");
double score = myScanner.nextDouble();
if(score >= 60) {
passNum++;
}
sum += score;
System.out.println("成绩为" + score);
}
System.out.println("sum=" + sum + "平均分=" + (sum / 5));
totalScore += sum;
}
System.out.println("三个班总分=" + totalScore + "平均分=" + (totalScore / 15));
System.out.println("及格人数=" + passNum);
}
}
/* 演示7:打印空心金字塔
思路分析:
1.先打印一个矩形
*****
*****
*****
*****
*****
2.打印半个金字塔
*
**
***
****
*****
3.打印整个金字塔
* 1个* 4个空格
*** 3个* 3个空格
***** 5个* 2个空格
******* 7个* 1个空格
********* 9个* 0个空格
4.打印空心金字塔
* 1个* 第一个和最后一个位置都是*
* * 2个*
* * 2个*
* * 2个*
********* 9个* 全部输出*
5.先死后活
1.把5层做成变量 int totalLevel = 5;
*/
public class Control2 {
public static void main(String[] args) {
int totalLevel = 5;
for(int i = 1;i <= totalLevel;i++){ //i表示层数
//在输出*之前,还要输出空格
for(int k = 1;k <= totalLevel - i;k++){
System.out.print(" ");
}
//控制打印每层的*个数
for(int j = 1;j <= 2 * i - 1;j++){
//当前行第一个和最后一个位置是*,最后一层全部*
if(j == 1 || j == 2 * i - 1 || i ==totalLevel ){
System.out.print("*");
} else {//其他情况输出空格
System.out.print(" ");
}
}
//每打印完一层后就换行
System.out.println("");
}
}
}