第3章 Java基本语法2

本章内容

第一节 分支结构

第二节 循环结构

第三节 特殊流程控制

第一节 分支结构

程序流程控制

顺序结构

程序从上到下逐行地执行,中间没有任何判断和跳转。

分支结构

根据条件,选择性地执行某段代码。

有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
  • 按步骤编写代码,效果如图所示:

编写步骤:

    1. 定义类 Test2
    2. 定义 main方法
    3. 定义变量折扣 discount,初始化为1, 总价totalPrice的值从键盘输入
    4. 判断当totalPrice >=500 ,discount赋值为0.5
    5. 判断当totalPrice >=400 且
    6. 判断当totalPrice >=300 且
    7. 判断当totalPrice >=200 且
    8. 判断当totalPrice >=0 且
    9. 判断当totalPrice
    10. 输出结果
  • 开发提示:

键盘输入需要用到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

案例:从键盘输入生日,判断星座

开发提示:

    1. 各个星座的日期范围如下:

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年的任意一天,请判断它是星期几

开发提示:

  1. 先统计这一天是这一年的第几天days
  2. 然后声明一个变量week,初始化为2
  3. 然后week加上days-1
  4. 然后求week与7的模数
  5. 然后输出结果,考虑星期天的特殊判断

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
  • 按步骤编写代码,效果如图所示:

编写步骤:

    1. 定义类 Test1
    2. 定义 main方法
    3. 定义变量i为0,i2为10
    4. 使用第一个while循环,当条件为

i小于5 时,则进入循环

    1. 循环内,i自增,i2自增
    2. 循环内,使用if判断,当

i大于等于 2 并且

i2小于15 时,同时输出i和i2的值

    1. 使用第二个while循环,当条件为

i2小于20 时,则进入循环

    1. 循环内,i自增,i2自增
    2. 循环内,使用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
  • 按步骤编写代码,效果如图所示:
  • 编写步骤
  1. 定义类 Test2,定义 main方法
  2. main方法中,定义int类型变量 a为1
  3. 使用while循环,判断a
  4. while循环内部,使用for循环,初始化int类型变量b为1,当b
  5. for循环内,不换行输出i并拼接" "
  6. for循环外,输出换行.
  7. 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
  • 按步骤编写代码,效果如图所示:
  • 编写步骤
    1. 定义类 Test5
    2. 定义 main方法
    3. 定义变量jj为20,a为0,b为0
    4. 使用for循环,初始化值ii为0,当ii
    5. 循环内,使用if判断ii被3整除,ii赋值给a,并输出ii拼接"Hello"
    6. 不被3整除,ii赋值给b,并输出ii拼接"World"
    7. 循环外,按照格式,打印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. 循环1-month月
    2. 在循环中判断该月是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(); } } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值