本章内容
第一节 分支结构
第二节 循环结构
第三节 特殊流程控制
第一节 分支结构
程序流程控制
顺序结构
程序从上到下逐行地执行,中间没有任何判断和跳转。
分支结构
根据条件,选择性地执行某段代码。
有if…else和switch两种分支语句。
循环结构
根据循环条件,重复性的执行某段代码。
有while、do…while、for三种循环语句。
顺序结构
Java中定义成员变量时采用合法的前向引用。如:
public class Test{
int num1 = 12;
int num2 = num1 + 2;
}
错误形式:
public class Test{
int num2 = num1 + 2;
int num1 = 12;
}
if语句三种格式:
1. if(true){
执行代码块;
}
2. if(条件表达式){
执行代码块;
}
else{
执行代码块;
}
3. if(条件表达式){
执行代码块;
}
else if (条件表达式){
执行代码块;
}
……
else{
执行代码块;
}
if-else语句应用举例
public class TestAge{
public static void main(String args[]){
int age = 75;
if (age< 0) {
System.out.println("不可能!");
} else if (age>250) {
System.out.println("是个妖怪!");
} else {
System.out.println(“人家芳龄 " + age +" ,马马乎乎啦!");
}
}
}
if语句例题1
从键盘输入小明的期末成绩。
当成绩为100分时,奖励一辆BMW;
当成绩为[80-99]时,奖励一个台iphone15s;
当成绩为[60-80]时,奖励一本参考书;
其它时,什么奖励也没有。
if语句例题2
l编写程序:由键盘输入三个整数分别存入变量num1、num2、num3,对它们进行排序(使用 if-else if-else),并且从小到大输出。
if语句例题2
l编写程序:由键盘输入三个整数分别存入变量num1、num2、num3,对它们进行排序(使用 if-else if-else),并且从小到大输出。
if语句练习1
1)对下列代码,若有输出,指出输出结果。
int x = 4;
int y = 1;
if (x > 2) {
if (y > 2)
System.out.println(x + y);
System.out.println("atguigu");
} else
System.out.println("x is " + x);
2)boolean b = true;
if(b == false) //如果写成if(b=false)能编译通过吗?如果能,结果是?
if语句练习2
大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出一定的条件:高:180cm以上;富:财富1千万以上;帅:是。
Ø如果这三个条件同时满足,则:“我一定要嫁给他!!!”
Ø如果三个条件有为真的情况,则:“嫁吧,比上不足,比下有余。”
Ø如果三个条件都不满足,则:“不嫁!”
Sysout(“身高: (cm))
scanner.nextInt();
Sysout(“财富: (千万))
scanner.nextDouble();
Sysout(“帅否: (true/false)) (是/否)
scanner.nextBoolean(); scanner.next(); str.equals(“是”)
分支结构2:switch语句
switch(表达式){
case 常量1:
语句1;
break;
case 常量2:
语句2;
break;
… …
case 常量N:
语句N;
break;
default:
语句;
break;
}
switch语句应用举例
public class Test{
public static void main(String args[]){
int i = 1;
switch(i) {
case 0:
System.out.println("zero");
break;
case 1:
System.out.println("one");
break;
default:
System.out.println("default");
break;
}
} }
public class Test{
public static void main(String args[]){
Stringseason = “summer”;
switch(season){
case“spring”:
System.out.println(“春暖花开");
break;
case“summer”:
System.out.println(“夏日炎炎");
break;
case“autumn”:
System.out.println(“秋高气爽");
break;
case“winter”:
System.out.println(“冬雪皑皑");
break;
default:
System.out.println(“季节输入有误");
break; }}}
switch语句有关规则
· switch(表达式)中表达式的返回值必须是下述几种类型之一: byte,short,char,int,枚举,String;
· case子句中的值必须是常量,且所有case子句中的值应是不同的;
· default子句是可任选的,当没有匹配的case时,执行default
· break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有break,程序会顺序执行到switch结尾
例题
1.使用 switch把小写类型的char型转为大写。只转换 a, b,c, d, e. 其它的输出“other”。
2.对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。
3.根据用于指定月份,打印该月份所属的季节。
3,4,5 春季 6,7,8夏季 9,10,11秋季 12,1, 2 冬季
练 习
•编写程序,从键盘接收整数参数.如果该数为1-7,打印对应的星期值,否则打印“非法参数”。
switch和if语句的对比
if和switch语句很像,具体什么场景下,应用哪个语句呢?
Ø
Ø如果判断的具体数值不多,而且符合byte、
short、int、
char这四种类型。虽然两个语句都可以使用,建议使用swtich语句。因为效率稍高。
Ø其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。
练 习
编写程序:从键盘上读入一个学生成绩,存放在变量score中,根据score的值输出其对应的成绩等级:
score>=90 等级:A
70=等级: B
60=等级: C
score等级:D
从键盘分别输入年、月、日,判断这一天是当年的第几天
注:判断一年是否是闰年的标准:
1)可以被4整除,但不可被100整除
2)可以被400整除
第二节 循环结构
循环结构
·循环语句功能
Ø在某些条件满足的情况下,反复执行特定代码的功能
·循环语句的四个组成部分
Ø 初始化部分(init_statement)
Ø 循环条件部分(test_exp)
Ø 循环体部分(body_statement)
Ø 迭代部分(alter_statement)
·循环语句分类
Ø for 循环
Ø while 循环
Ø do/while 循环
for循环语句
l语法格式
for(初始化表达式①; 布尔值测试表达式②⑤⑦; 更改表达式){
语句或语句块③⑥ ;
}
应用举例
public class ForLoop {
public static void main(String args[]){
int result = 0;
for(int i=1; i
result += i;
}
System.out.println("result=" + result);
}
}
for语句例题
编写程序FooBizBaz.java,从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印出“foo”,在每个5的倍数行上打印“biz”,在每个7的倍数行上打印输出“baz”。
1 2 3 foo 4 5 biz 6 foo 7 baz … | 15 foo biz …. 105 foo biz baz … |
for语句练习
1.打印1~100之间所有奇数的和
2.打印1~100之间所有是7的倍数的整数的个数及
总和(体会设置计数器的思想)
3.输出所有的水仙花数,所谓水仙花数是指一个3
位数,其各个位上数字立方和等于其本身。
例如: 153 = 111 + 333 + 555
while 循环语句
语法格式
[初始化语句]
while( 布尔值测试表达式){
语句或语句块;
[更改语句;]
}
应用举例
public class WhileLoop {
public static void main(String args[]){
int result = 0;
int i=1;
while(i
result += i;
i++;
}
System.out.println("result=" + result);
}
}
do-while 循环语句
语法格式
[初始化语句]
do{
语句或语句块;
[更改语句;]
}while(布尔值测试表达式);
应用举例
public class WhileLoop {
public static void main(String args[]){
int result = 0, i=1;
do{
result += i;
i++;
}while(i
System.out.println("result=" + result);
}
}
循环语句练习
编写程序一:求1到100之间所有偶数的和。用for和while语句分别完成。
嵌套循环
将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do…while均可以作为外层循环和内层循环。
实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环。
设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n=mn次。
例题:1)九九乘法表 2)1—100之间的所有质数 |
第三节 特殊流程控制
特殊流程控制语句1
break 语句
break语句用于终止某个语句块的执行
{ ……
break;
……
}
break语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块
label1: { ……
label2: { ……
label3: { ……
break label2;
……
}
}
}
break 语句用法举例
public class TestBreak{
public static void main(String args[]){
for(int i = 0; i
if(i==3)
break;
System.out.println(" i =" + i);
}
System.out.println("Game Over!");
}
}
特殊流程控制语句2
continue 语句
continue语句用于跳过某个循环语句块的一次执行
continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环
continue语句用法举例
public class ContinueTest {
public static void main(String args[]){
for (int i = 0; i < 100; i++) {
if (i%10==0)
continue;
System.out.println(i);
} } }
特殊流程控制语句3
· return:并非专门用于结束循环的,它的功能是结束一个方法。当一个方法执行到一个return语句时,这个方法将被结束。
· 与break和continue不同的是,return直接结束整个方法,不管这个return处于多少层循环之内
特殊流程控制语句说明
·break只能用于switch语句和循环语句中。
·continue 只能用于循环语句中。
·二者功能类似,但continue是终止本次循环,break是终止本层循环。
·break、continue之后不能有其他的语句,因为程序永远不会执行其后的语句。
·标号语句必须紧接在循环的头部。标号语句不能用在非循环语句的前面。
练 习
编写程序一,打印1-100之间13的倍数,使用continue语句
编写程序二:从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序。
补充:
最简单无限循环格式:while(true) , for(;;),无限循环存在的原因是并不知道循环多少次,需要根据某些条件,来控制循环。
class PositiveNegative { public static void main(String[] args) { //while(true) Scanner scanner = new Scanner(System.in); int a = 0;//统计正数的个数 int b = 0;//统计负数的个数 for(;;){ System.out.println("请输入一个整数:"); int z = scanner.nextInt(); if(z>0) a++; else if(z<0) b++; else break; } System.out.println("正数的个数为:"+a); System.out.println("负数的个数为:"+b); } }
day02_课后练习-条件判断
编程题
第一题
语法点:变量,运算符,if...else
案例:从键盘输入一个整数,判断它是奇数还是偶数(这里把0归为偶数)
开发提示:
键盘输入需要用到Scanner类。
java.util.Scanner input = new java.util.Scanner(System.in);//准备从键盘输入的扫描仪 int num = input.nextInt();//输入整数
能够被2整除的是偶数,不能被2整除的是奇数
public class Test01{ public static void main(String[] args){ java.util.Scanner input = new java.util.Scanner(System.in); System.out.print("请输入一个整数:"); int num = input.nextInt(); if(num % 2 == 0){ System.out.println(num + "是偶数"); }else{ System.out.println(num + "是奇数"); } } }
第二题
语法点:变量,运算符,if...else
案例:从键盘输入一个字符,判断它是字母还是数字,还是其他字符
开发提示:
键盘输入需要用到Scanner类。
java.util.Scanner input = new java.util.Scanner(System.in);//准备接收从键盘输入的扫描仪 char c = input.next().charAt(0);//输入单个字符
数字范围:'0'-'9'
字母范围:'A'-'Z','a'-'z'
public class Test02{ public static void main(String[] args){ java.util.Scanner input = new java.util.Scanner(System.in); System.out.print("请输入一个字符:"); char c = input.next().charAt(0); if(c >= '0' && c <= '9'){ System.out.println(c + "是数字."); }else if(c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z'){ System.out.println(c + "是字母."); }else{ System.out.println(c + "非数字非字母的其他字符."); } } }
第三题
- 语法点:变量,运算符,if...else
- 按步骤编写代码,效果如图所示:
编写步骤:
-
- 定义类 Test2
- 定义 main方法
- 定义变量折扣 discount,初始化为1, 总价totalPrice的值从键盘输入
- 判断当totalPrice >=500 ,discount赋值为0.5
- 判断当totalPrice >=400 且
- 判断当totalPrice >=300 且
- 判断当totalPrice >=200 且
- 判断当totalPrice >=0 且
- 判断当totalPrice
- 输出结果
- 开发提示:
键盘输入需要用到Scanner类。
java.util.Scanner input = new java.util.Scanner(System.in);//准备接收从键盘输入的扫描仪 double totalPrice = input.nextDouble();//输入double值
public class Test03{ public static void main(String[] args){ java.util.Scanner input = new java.util.Scanner(System.in); System.out.print("请输入总价格:"); double discount = 1; double totalPrice = input.nextDouble(); if(totalPrice>=500){ discount = 0.5; }else if(totalPrice>=400){ discount = 0.6; }else if(totalPrice>=300){ discount = 0.7; }else if(discount>=200){ discount = 0.8; }else if(discount >= 0){ discount = 1; }else{ System.out.println("输入有误!"); } System.out.println("总价:" + totalPrice); System.out.println("折扣:" + discount); System.out.println("折扣后总价:" + totalPrice*discount); } }
第四题
语法点:变量,运算符,if...else
案例:从键盘输入生日,判断星座
开发提示:
-
- 各个星座的日期范围如下:
public class Test04 { public static void main(String[] args) { java.util.Scanner input = new java.util.Scanner(System.in); System.out.print("请输入月份:"); int month = input.nextInt(); System.out.print("请输入日期:"); int day = input.nextInt(); if ((month == 1 && day >= 20) || (month == 2 && day <= 18)) { System.out.println("生日" + month + "月" + day + "日是水瓶座"); } else if ((month == 2 && day >= 19) || (month == 3 && day <= 20)) { System.out.println("生日" + month + "月" + day + "日是双鱼座"); }else if ((month == 3 && day >= 21) || (month == 4 && day <= 19)) { System.out.println("生日" + month + "月" + day + "日是白羊座"); }else if ((month == 4 && day >= 20) || (month == 5 && day <= 20)) { System.out.println("生日" + month + "月" + day + "日是金牛座"); }else if ((month == 5 && day >= 21) || (month == 6 && day <= 21)) { System.out.println("生日" + month + "月" + day + "日是双子座"); }else if ((month == 6 && day >= 22) || (month == 7 && day <= 22)) { System.out.println("生日" + month + "月" + day + "日是巨蟹座"); }else if ((month == 7 && day >= 23) || (month == 8 && day <= 22)) { System.out.println("生日" + month + "月" + day + "日是狮子座"); }else if ((month == 8 && day >= 23) || (month == 9 && day <= 22)) { System.out.println("生日" + month + "月" + day + "日是处女座"); }else if ((month == 9 && day >= 23) || (month == 10 && day <= 23)) { System.out.println("生日" + month + "月" + day + "日是天平座"); }else if ((month == 10 && day >= 24) || (month == 11 && day <= 22)) { System.out.println("生日" + month + "月" + day + "日是天蝎座"); }else if ((month == 11 && day >= 23) || (month == 12 && day <= 21)) { System.out.println("生日" + month + "月" + day + "日是射手座"); }else if ((month == 12 && day >= 22) || (month == 1 && day <= 19)) { System.out.println("生日" + month + "月" + day + "日是摩羯座"); } } }
day03_课后练习-选择结构
编程题
第一题
语法点:变量,运算符,switch...case
案例需求:编写一个程序,为一个给定的年份找出其对应的中国生肖。中国的生肖基于12年一个周期,每年用一个动物代表:rat(鼠)、ox(牛)、tiger(虎)、rabbit(兔)、dragon(龙)、snake(蛇)、
horse(马)、sheep(羊)、monkey(候)、rooster(鸡)、dog(狗)、pig(猪)。
提示:2017年:鸡 2017 % 12 == 1
public class Test05 { public static void main(String[] args) { java.util.Scanner input = new java.util.Scanner(System.in); System.out.print("请输入年份:"); int year = input.nextInt(); switch(year%12){ case 1: System.out.println("鸡"); break; case 2: System.out.println("狗"); break; case 3: System.out.println("猪"); break; case 4: System.out.println("鼠"); break; case 5: System.out.println("牛"); break; case 6: System.out.println("虎"); break; case 7: System.out.println("兔"); break; case 8: System.out.println("龙"); break; case 9: System.out.println("蛇"); break; case 10: System.out.println("马"); break; case 11: System.out.println("羊"); break; case 0: System.out.println("猴"); break; } } }
第二题
语法点:变量,运算符,if和switch...case
案例:已知2019年1月1日是星期二,从键盘输入2019年的任意一天,请判断它是星期几
开发提示:
- 先统计这一天是这一年的第几天days
- 然后声明一个变量week,初始化为2
- 然后week加上days-1
- 然后求week与7的模数
- 然后输出结果,考虑星期天的特殊判断
public class Test07 { public static void main(String[] args){ //1、从键盘分别输入年、月、日 java.util.Scanner input = new java.util.Scanner(System.in); System.out.print("月:"); int month = input.nextInt(); System.out.print("日:"); int day = input.nextInt(); //判断这一天是当年的第几天==>从1月1日开始,累加到xx月xx日这一天 //(1)[1,month-1]个月满月天数 //(2)第month个月的day天 //(3)单独考虑2月份是否是29天(依据是看year是否是闰年) //2、声明一个变量days,用来存储总天数 //int days = 0; //累加第month个月的day天 //days += day; //修改上面的代码,直接把days初始化为day int days = day; //3、累加[1,month-1]个月满月天数 switch(month){ case 12: //累加的1-11月 days += 30;//这个30是代表11月份的满月天数 //这里没有break,继续往下走 case 11: //累加的1-10月 days += 31;//这个31是代表10月的满月天数 //这里没有break,继续往下走 case 10: days += 30;//9月 case 9: days += 31;//8月 case 8: days += 31;//7月 case 7: days += 30;//6月 case 6: days += 31;//5月 case 5: days += 30;//4月 case 4: days += 31;//3月 case 3: days += 28;//2月,因为2019年的2月是28天 case 2: days += 31;//1月 } //days 里面存的是这一天是这一年的第几天 //已知2019年1月1日是星期二 //假设我输入的就是1月1日,那么days中就是1 int week = 1;//2018年12月31日的星期 week += days; week %= 7; System.out.print(month+"月" + day +"日是这一年的第"+days+"天,是星期" + (week==0?"天":week)) ; } }
简答题
1、switch是否能作用在byte上,是否能作用在long上,是否能作用在String上?
可以作用在byte上, 不能作用在long上 可以作用在String上
day03_课后练习-循环结构
第一题
- 语法点:运算符,while,if
- 按步骤编写代码,效果如图所示:
编写步骤:
-
- 定义类 Test1
- 定义 main方法
- 定义变量i为0,i2为10
- 使用第一个while循环,当条件为
i小于5 时,则进入循环
-
- 循环内,i自增,i2自增
- 循环内,使用if判断,当
i大于等于 2 并且
i2小于15 时,同时输出i和i2的值
-
- 使用第二个while循环,当条件为
i2小于20 时,则进入循环
-
- 循环内,i自增,i2自增
- 循环内,使用if判断,当
i大于8 或者
i2小于等于18 时,同时输出i和i2的值
public class Test01 { public static void main(String[] args) { int i = 0; int i2 = 10; while(i<5){ i++; i2++; if(i>=2 && i2<15){ System.out.println("i:" + i + ",i2:" + i2); } } System.out.println("----------------------"); while(i2<20){ i++; i2++; if(i>8 || i2<=18){ System.out.println("i:" + i + ",i2:" + i2); } } } }
第二题
- 语法点:方法,运算符,for,while
- 按步骤编写代码,效果如图所示:
- 编写步骤
- 定义类 Test2,定义 main方法
- main方法中,定义int类型变量 a为1
- 使用while循环,判断a
- while循环内部,使用for循环,初始化int类型变量b为1,当b
- for循环内,不换行输出i并拼接" "
- for循环外,输出换行.
- for循环外,a自增.
public class Test02 { public static void main(String[] args) { int a = 1; System.out.println("--------------------------"); while(a<=5){ for (int b = 1; b <= 5; b++) { System.out.print(b+" "); } System.out.println(); a++; } System.out.println("--------------------------"); } }
第三题
- 语法点:运算符,for,if
- 按步骤编写代码,效果如图所示:
- 编写步骤
-
- 定义类 Test5
- 定义 main方法
- 定义变量jj为20,a为0,b为0
- 使用for循环,初始化值ii为0,当ii
- 循环内,使用if判断ii被3整除,ii赋值给a,并输出ii拼接"Hello"
- 不被3整除,ii赋值给b,并输出ii拼接"World"
- 循环外,按照格式,打印a与b的乘积
public class Test03 { public static void main(String[] args) { int jj = 20; int a = 0; int b = 0; for(int ii = 0;ii < jj;ii+=2,jj--){ if(ii % 3 == 0){ a = ii; System.out.println(ii + " Hello"); }else{ b = ii; System.out.println(ii + " World"); } } System.out.println("a*b=" + a + "*" + b + "=" + a*b); } }
第四题
- 语法点:运算符,for,switch
- 打印星座信息,效果如图所示:
开发提示:
- 1-12的规律数字,可以使用for循环处理
- 根据不同的数字,匹配显示不同的文字,可以使用switch匹配
public class Test04 { public static void main(String[] args) { for (int i = 1; i <= 12; i++) { switch(i){ case 1: System.out.println( i + ":水瓶座"); break; case 2: System.out.println( i + ":双鱼座"); break; case 3: System.out.println( i + ":白羊座"); break; case 4: System.out.println( i + ":金牛座"); break; case 5: System.out.println( i + ":双子座"); break; case 6: System.out.println( i + ":巨蟹座"); break; case 7: System.out.println( i + ":狮子座"); break; case 8: System.out.println( i + ":处女座"); break; case 9: System.out.println( i + ":天平座"); break; case 10: System.out.println( i + ":天蝎座"); break; case 11: System.out.println( i + ":射手座"); break; case 12: System.out.println( i + ":摩羯座"); break; } } } }
第五题
语法点:运算符,for,if
案例需求:从键盘分别输入年、月、日,使用循环for+if实现,判断这一天是当年的第几天
注:判断一年是否是闰年的标准:
1)可以被4整除,但不可被100整除
2)可以被400整除
- 开发提示:
-
- 循环1-month月
- 在循环中判断该月是31天、30天、28/29天,分别累加
public class Test05 { public static void main(String[] args) { java.util.Scanner input = new java.util.Scanner(System.in); System.out.print("请输入年:"); int year = input.nextInt(); System.out.print("请输入月:"); int month = input.nextInt(); System.out.print("请输入日:"); int day = input.nextInt(); int days = day; for (int i = 1; i < month; i++) { if (i == 4 || i == 6 || i == 9 || i == 11) { days += 30; } else if (i == 2) { if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { days += 29; } else { days += 28; } } else { days += 31; } } System.out.println(year + "年" + month + "月" + day + "日是这一年的第" + days + "天"); } }
第六题
案例需求:假设从2000年1月1日开始三天打鱼,两天晒网,从键盘输入今天的日期年、月、日,显示今天是打鱼还是晒网?
public class Test06 { public static void main(String[] args){ //1、从键盘分别输入年、月、日 java.util.Scanner input = new java.util.Scanner(System.in); System.out.print("年:"); int year = input.nextInt(); System.out.print("月:"); int month = input.nextInt(); System.out.print("日:"); int day = input.nextInt(); /* (1)先算出,这一天距离2000年1月1日是第几天 ①第month月的day天 ②第year年的[1,month-1]的满月 ③从[2000,year-1]的满年天数 (2)用总天数%5,看余数,余数是1,2,3是打鱼,4和0是晒网 */ int days = day;//①第month月的day天 //②累加[1,month-1]的满月天数 for(int i=1; i<month; i++){//这个i代表月份 if(i==4 || i==6 || i==9 || i==11){ days+=30; }else if(i==2){ if(year%4==0 && year%100!=0 || year%400==0){ days+=29; }else{ days+=28; } }else{ days+=31; } } //③从[2000,year-1]的满年天数 for(int i=2000; i<year; i++){//这个i代表年份 if(i%4==0 && i%100!=0 || i%400==0){ days+=366; }else{ days+=365; } } //判断 if(days%5==1 || days%5==2 || days%5==3){ System.out.println("打鱼"); }else{ System.out.println("晒网"); } } }
第七题
- 打印倒三角形,效果如图所示:
- 开发提示:
- 平面图形涉及到有行有列,考虑到嵌套for循环
- 一个外循环控制行,两个内循环控制输出内容
- 一个内循环负责输出空格,另一个内循环输出"*"
public class Test07 { public static void main(String[] args){ for(int i=1; i<=5; i++){//控制行数 /* 每一行有三件事: (1)打印n个空格 (2)打印m个" *" (3)换行 */ //(1)打印n个空格 /* 第1行:0个,当i=1, j应该让它第一次循环都不满足 j<i 第2行:1个,当i=2, j运行1次,j=1 第3行:2个,当i=3, j运行2次,j=1,2 第4行:3个,当i=4, j运行3次,j=1,2,3 第5行:4个,当i=5, j运行4次,j=1,2,3,4 */ for(int j=1; j<i; j++){ System.out.print(" "); } //(2)打印m个" *" /* 第1行:5个,当i=1,j运行5次,j=1,2,3,4,5 j<=6-i 第2行:4个,当i=2,j运行4次,j=1,2,3,4 第3行:3个,当i=3,j运行3次,j=1,2,3 第4行:2个,当i=4,j运行2次,j=1,2 第5行:1个,当i=5,j运行1次,j=1 */ for(int j=1; j<=6-i; j++){ System.out.print(" *"); } //(3)换行 System.out.println(); } } }
class Day04_Test07_2{ public static void main(String[] args){ for(int i=1; i<=5; i++){//控制行数 /* 每一行有三件事: (1)打印n个空格 (2)打印m个" *" (3)换行 */ //(1)打印n个空格 /* 第1行:0个,当i=1, j应该让它第一次循环都不满足 j<i 第2行:1个,当i=2, j运行1次,j=1 第3行:2个,当i=3, j运行2次,j=1,2 第4行:3个,当i=4, j运行3次,j=1,2,3 第5行:4个,当i=5, j运行4次,j=1,2,3,4 */ for(int j=1; j<i; j++){ System.out.print(" "); } //(2)打印m个" *" /* 第1行:5个,当i=1,j运行5次,j=5,4,3,2,1 j>=i 第2行:4个,当i=2,j运行4次,j=5,4,3,2 第3行:3个,当i=3,j运行3次,j=5,4,3 第4行:2个,当i=4,j运行2次,j=5,4 第5行:1个,当i=5,j运行1次,j=5 */ for(int j=5; j>=i; j--){ System.out.print(" *"); } //(3)换行 System.out.println(); } } }
第八题
- 打印『X』对称图形,效果如图所示:
- 开发提示:
- 平面图形涉及到有行有列,考虑到嵌套for循环
- 一个外循环控制行,一个内循环控制输出内容
- 在内循环中,根据变量的变化规律,判断输出"O"还是"*"
public class Test08 { public static void main(String[] args){ for(int i=1; i<=7; i++){//控制行数 //(1)打印该行的*或o /* 发现O+*的总个数是7个 当i=1, 当j=1和j=7的时候是O,其余的是* 当i=2, 当j=2和j=6的时候是O,其余的是* 当i=3, 当j=3和j=5的时候是O,其余的是* 当i=4, 当j=4的时候是O,其余的是* 当i=5, 当j=5和j=3的时候是O,其余的是* 当i=6, 当j=6和j=2的时候是O,其余的是* 当i=7, 当j=7和j=1的时候是O,其余的是* */ for(int j=1; j<=7; j++){ if(i==j || i==8-j){ System.out.print("O"); }else{ System.out.print("*"); } } //(2)每一行的最后一件事是换行 System.out.println(); } } }
第九题
- 打印菱形
- 开发提示:
- 平面图形涉及到有行有列,考虑到嵌套for循环
- 一个外循环控制行,两个内循环控制输出内容
- 一个内循环负责输出空格,另一个内循环输出"*"
public class Test09 { public static void main(String[] args){ //上半部分:正的等腰三角形 //5行 for(int i=1; i<=5; i++){ //(1)打印空格 /* 当i=1,打印4个空格,j=4,3,2,1 j>=i 当i=2,打印3个空格,j=4,3,2 当i=3,打印2个空格,j=4,3 当i=4,打印1个空格,j=4 当i=5,打印0个空格,j=4,让循环条件一次都不满足 */ for(int j=4; j>=i; j--){ System.out.print(" "); } //(2)打印* /* 当i=1,打印1个,j=1 j<=2*i-1 当i=2,打印3个,j=1,2,3, 当i=3,打印5个,j=1,2,3,4,5 当i=4,打印7个,j=1,2,3,4,5,6,7 当i=5,打印9个,j=1,2,3,4,5,6,7,8,9 */ for(int j=1; j<=2*i-1; j++){ System.out.print("* "); } //(3)换行 System.out.println(); } //下半部分:倒立的等腰三角形 //4行 for(int i=1; i<=4; i++){ //(1)打印空格 /* 当i=1,1个空格,j=1 j<=i 当i=2,2个空格,j=1,2 当i=3,3个空格,j=1,2,3 当i=4,4个空格,j=1,2,3,4 */ for(int j=1; j<=i; j++){ System.out.print(" "); } //(2)打印* /* 当i=1,7个*,j=1,2,3,4,5,6,7 j<=9-2*i; 当i=2,5个*,j=1,2,3,4,5 当i=3,3个*,j=1,2,3 当i=4,1个*,j=1 */ for(int j=1; j<=9-2*i; j++){ System.out.print("* "); } //(3)换行 System.out.println(); } } }
public class Test09_02 { public static void main(String[] args){ //上半部分:正的等腰三角形 //5行 for(int i=1; i<=5; i++){ //(1)打印空格 /* 当i=1,打印4个空格,j=4,3,2,1 j>=i 当i=2,打印3个空格,j=4,3,2 当i=3,打印2个空格,j=4,3 当i=4,打印1个空格,j=4 当i=5,打印0个空格,j=4,让循环条件一次都不满足 */ for(int j=4; j>=i; j--){ System.out.print(" "); } //(2)打印* /* 当i=1,打印1个,j=1 j<=2*i-1 当i=2,打印3个,j=1,2,3, 当i=3,打印5个,j=1,2,3,4,5 当i=4,打印7个,j=1,2,3,4,5,6,7 当i=5,打印9个,j=1,2,3,4,5,6,7,8,9 */ for(int j=1; j<=2*i-1; j++){ //不是全部打印* if(j==1 || j==2*i-1){ System.out.print("* "); }else{ System.out.print(" "); } } //(3)换行 System.out.println(); } //下半部分:倒立的等腰三角形 //4行 for(int i=1; i<=4; i++){ //(1)打印空格 /* 当i=1,1个空格,j=1 j<=i 当i=2,2个空格,j=1,2 当i=3,3个空格,j=1,2,3 当i=4,4个空格,j=1,2,3,4 */ for(int j=1; j<=i; j++){ System.out.print(" "); } //(2)打印* /* 当i=1,7个*,j=1,2,3,4,5,6,7 j<=9-2*i; 当i=2,5个*,j=1,2,3,4,5 当i=3,3个*,j=1,2,3 当i=4,1个*,j=1 */ for(int j=1; j<=9-2*i; j++){ //不是全部打印* if(j==1 || j==9-2*i){ System.out.print("* "); }else{ System.out.print(" "); } } //(3)换行 System.out.println(); } } }