多重循环

1. 打印图案

外层循环变量变化一次,内层循环变量变化一轮 1.外层循环控制行数 2.内层循环控制列数 3.第一行的个数决定了计数器的初始值 4.数量 越来越多 ++ 必须设定一个上限 也就是计数器必须小于 或者 小于等于某个值 越来越少 — 必须设定一个下限 也就是计数器必须大于 或者 大于等于某个值

平行四边形

  1. package com.qfedu.test1;
  2. /**
  3. * 使用多重循环打印复杂的图案
  4. * 1.外层循环控制行数
  5. * 2.内层循环控制列数
  6. * 3.第一行的个数决定了计数器的初始值
  7. * 4.数量
  8. * 越来越多 ++ 必须设定一个上限 也就是计数器必须小于 或者 小于等于某个值
  9. * 越来越少 -- 必须设定一个下限 也就是计数器必须大于 或者 大于等于某个值
  10. * @author WHD
  11. *
  12. */
  13. public class Test3 {
  14. public static void main(String[] args) {
  15. for (int i = 1; i <= 5; i++) {
  16. // 左半部分 倒三角
  17. for(int j = 5;j >= i;j--) {
  18. System.out.print("&");
  19. }
  20. // 右半部分 矩形
  21. for(int j =1;j<=5;j++) {
  22. System.out.print("*");
  23. }
  24. // 换行
  25. System.out.println();
  26. }
  27. }
  28. }

正三角形

  1. package com.qfedu.test2;
  2. /**
  3. * 使用多重循环打印正三角形
  4. * 分析:
  5. * 左半部分 倒三角
  6. * 右半部分 直角三角形
  7. *
  8. * 1.外层循环控制行数
  9. * 2.内层循环控制列数
  10. * 3.第一行的个数决定了计数器的初始值
  11. * 4.数量
  12. * 越来越多 ++ 必须设定一个上限 也就是计数器必须小于 或者 小于等于某个值
  13. * 越来越少 -- 必须设定一个下限 也就是计数器必须大于 或者 大于等于某个值
  14. * @author WHD
  15. *
  16. */
  17. public class Test1 {
  18. public static void main(String[] args) {
  19. for (int i = 1; i <= 5; i++) {
  20. // 左半部分 倒三角
  21. for(int j =5;j >= i;j--) {
  22. System.out.print(" ");
  23. }
  24. // 右半部分 直角三角形
  25. // 直角三角形列数 规律 每一行的个数是行号 * 2 -1
  26. for(int j = 1;j <= 2 * i - 1;j++) {
  27. System.out.print("*");
  28. }
  29. // 换行
  30. System.out.println();
  31. }
  32. }
  33. }

2. 方法

2.1 概念

方法是一些代码的集合,用于实现特定的功能,可以反复使用。

2.2 定义和调用

  1. package com.qfedu.test3;
  2. /**
  3. * 方法 :一段代码的集合 用来解决特定的问题 可以反复调用
  4. * 使用方法打印诗句 每一行以后十个横线
  5. * @author WHD
  6. *
  7. */
  8. public class Test2 {
  9. public static void main(String[] args) {
  10. System.out.println("床前明月光");
  11. printSign(); // 方法调用 直接在调用处书写方法名称即可
  12. System.out.println("疑是地上霜");
  13. printSign();
  14. System.out.println("举头望明月");
  15. printSign();
  16. System.out.println("低头思故乡");
  17. printSign();
  18. }
  19. /**
  20. * 定义方法
  21. * public static void开头 表示公开的 静态的 无返回值的方法
  22. */
  23. public static void printSign() {
  24. for (int i = 0; i < 10; i++) {
  25. System.out.print("-");
  26. }
  27. System.out.println();
  28. }
  29. }

2.3 形参和实参

观察我们之前编写的方法,可以实现打印十个横线,但是不能灵活的控制字符的个数,以及字符的类型,所以我们可以使用有参数的方法来实现这个效果 形参:方法定义的时候书写的参数,规定了参数的个数、类型、顺序 实参:方法调用的时候传入的参数,遵守形参的规定

1.用户可以指定符号的个数

  1. package com.qfedu.test4;
  2. /**
  3. * 新的需求:
  4. * 1.用户可以指定符号的个数
  5. * @author WHD
  6. *
  7. */
  8. public class Test1 {
  9. public static void main(String[] args) {
  10. System.out.println("床前明月光");
  11. printSign(10); // 10为实参(实际参数) 必须遵守形参的约定 参数的个数、类型、顺序
  12. System.out.println("疑是地上霜");
  13. int num1 = 5;
  14. printSign(num1);
  15. System.out.println("举头望明月");
  16. int a = 5;
  17. int b = 10;
  18. printSign(a + b);
  19. System.out.println("低头思故乡");
  20. printSign(3);
  21. }
  22. /**
  23. * num表示形参(形式参数)
  24. * 形参规定了参数的个数、类型、顺序
  25. * 表示实参必须遵守这个规定
  26. * @param num
  27. */
  28. public static void printSign(int num) {
  29. for(int i =1;i <= num;i++) {
  30. System.out.print("-");
  31. }
  32. System.out.println();
  33. }
  34. }

2.用户可以指定符号的类型

  1. package com.qfedu.test4;
  2. /**
  3. * 新的需求:
  4. * 2.用户可以指定符号的类型
  5. * @author WHD
  6. *
  7. */
  8. public class Test2 {
  9. public static void main(String[] args) {
  10. System.out.println("床前明月光");
  11. printSign('%');
  12. System.out.println("疑是地上霜");
  13. char sign = '^';
  14. printSign(sign);
  15. System.out.println("举头望明月");
  16. char ch1 = 65;
  17. printSign(ch1);
  18. System.out.println("低头思故乡");
  19. printSign((char)66);
  20. }
  21. public static void printSign(char sign) {
  22. for(int i = 1;i <= 10;i++) {
  23. System.out.print(sign);
  24. }
  25. System.out.println();
  26. }
  27. }

3.将前两个需求结合起来 用户可以控制字符的个数 和 类型

  1. package com.qfedu.test4;
  2. /**
  3. * 3.将前两个需求结合起来 用户可以控制字符的个数 和 类型
  4. * @author WHD
  5. *
  6. */
  7. public class Test3 {
  8. public static void main(String[] args) {
  9. System.out.println("床前明月光");
  10. printSign(10,'&');
  11. System.out.println("疑是地上霜");
  12. int num1 = 5;
  13. printSign(num1,'&');
  14. System.out.println("举头望明月");
  15. printSign(4,'*');
  16. System.out.println("低头思故乡");
  17. printSign(3,'$');
  18. }
  19. /**
  20. * 形参:规定了参数的个数、类型、顺序
  21. * 表示实参必须遵守这个规定
  22. * @param num
  23. * @param sign
  24. */
  25. public static void printSign(int num,char sign) {
  26. for(int i = 1;i <= num;i++) {
  27. System.out.print(sign);
  28. }
  29. System.out.println();
  30. }
  31. }

2.4 返回值和返回值类型

void表示方法没有任何返回值,如果需要方法执行完毕以后有返回值给调用者,必须使用其他的类型来代替void 可以书写的类型:八种基本数据类型,引用数据类型 return表示中断方法并且返回内容

return关键字用法1:如果返回值类型不是void,必须使用return关键字返回对应类型的数据

  1. package com.qfedu.test5;
  2. /**
  3. * 编写方法模拟计算器两个数加法
  4. * 得到最终值以后乘以10
  5. * return 返回
  6. * 如果方法的声明返回值类型不是void 那么必须在方法的末尾加上return关键字并且 返回对应类型的值
  7. * return关键字表示中断方法并且返回内容
  8. * @author WHD
  9. *
  10. */
  11. public class Test1 {
  12. public static void main(String[] args) {
  13. add(10,20);
  14. int a = 30;
  15. int sum = addtion(11,22);
  16. System.out.println(sum * 10);
  17. }
  18. public static void add(int numa,int numb) {
  19. System.out.println(numa + numb);
  20. }
  21. public static int addtion(int a,int b){
  22. int sum = a + b;
  23. return sum;
  24. // return sum;不可达代码
  25. // System.out.println(); 不可达代码
  26. }
  27. }

return关键字用法2: 如果需要在分支结构中return值,必须保证每一种都有返回值

  1. package com.qfedu.test5;
  2. /**
  3. * 编写方法判断数字是奇数还是偶数
  4. *
  5. * 如果需要在分支结构中return值 那么必须保证每一种情况都有返回值
  6. * @author WHD
  7. *
  8. */
  9. public class Test2 {
  10. public static void main(String[] args) {
  11. System.out.println(isEven(11));
  12. System.out.println(guessNum(11));
  13. }
  14. public static boolean guessNum(int num) {
  15. if(num % 2 == 0) {
  16. return true;
  17. }
  18. return false;
  19. }
  20. public static String isEven(int num) {
  21. if(num % 2 == 0) {
  22. return "偶数";
  23. }
  24. return "奇数";
  25. }
  26. }

return关键字用法3:在返回值类型为void的方法中return 此时return只表示中断方法,并且return关键字之后不能有任何内容

  1. package com.qfedu.test5;
  2. /**
  3. * 在返回值类型为void的情况 使用return表示中断方法
  4. * return关键字之后不能加任何内容
  5. * @author WHD
  6. *
  7. */
  8. public class Test3 {
  9. public static void main(String[] args) {
  10. m1();
  11. }
  12. public static void m1() {
  13. for (int i = 0; i < 50; i++) {
  14. if(i == 20) {
  15. return; // 注意return和break的区别 break只是中断循环 return中断方法
  16. }
  17. System.out.println(i);
  18. }
  19. System.out.println("方法执行结束");
  20. }
  21. }

2.5 多级调用

方法与方法之间可以互相调用,直接书写方法名称即可。执行规则,遇到方法先将方法执行完,再接着执行后续代码。

  1. package com.qfedu.test5;
  2. public class Test4 {
  3. public static void main(String[] args) {
  4. m1();
  5. }
  6. public static void m1() {
  7. System.out.println("m1 方法开始执行");
  8. m2();
  9. System.out.println("m1方法执行结束");
  10. }
  11. public static void m2() {
  12. System.out.println("m2方法开始");
  13. System.out.println("m2方法结束");
  14. }
  15. }