多重循环
1. 打印图案
外层循环变量变化一次,内层循环变量变化一轮 1.外层循环控制行数 2.内层循环控制列数 3.第一行的个数决定了计数器的初始值 4.数量 越来越多 ++ 必须设定一个上限 也就是计数器必须小于 或者 小于等于某个值 越来越少 — 必须设定一个下限 也就是计数器必须大于 或者 大于等于某个值
平行四边形
package com.qfedu.test1;/*** 使用多重循环打印复杂的图案* 1.外层循环控制行数* 2.内层循环控制列数* 3.第一行的个数决定了计数器的初始值* 4.数量* 越来越多 ++ 必须设定一个上限 也就是计数器必须小于 或者 小于等于某个值* 越来越少 -- 必须设定一个下限 也就是计数器必须大于 或者 大于等于某个值* @author WHD**/public class Test3 {public static void main(String[] args) {for (int i = 1; i <= 5; i++) {// 左半部分 倒三角for(int j = 5;j >= i;j--) {System.out.print("&");}// 右半部分 矩形for(int j =1;j<=5;j++) {System.out.print("*");}// 换行System.out.println();}}}
正三角形
package com.qfedu.test2;/*** 使用多重循环打印正三角形* 分析:* 左半部分 倒三角* 右半部分 直角三角形** 1.外层循环控制行数* 2.内层循环控制列数* 3.第一行的个数决定了计数器的初始值* 4.数量* 越来越多 ++ 必须设定一个上限 也就是计数器必须小于 或者 小于等于某个值* 越来越少 -- 必须设定一个下限 也就是计数器必须大于 或者 大于等于某个值* @author WHD**/public class Test1 {public static void main(String[] args) {for (int i = 1; i <= 5; i++) {// 左半部分 倒三角for(int j =5;j >= i;j--) {System.out.print(" ");}// 右半部分 直角三角形// 直角三角形列数 规律 每一行的个数是行号 * 2 -1for(int j = 1;j <= 2 * i - 1;j++) {System.out.print("*");}// 换行System.out.println();}}}
2. 方法
2.1 概念
方法是一些代码的集合,用于实现特定的功能,可以反复使用。
2.2 定义和调用
package com.qfedu.test3;/*** 方法 :一段代码的集合 用来解决特定的问题 可以反复调用* 使用方法打印诗句 每一行以后十个横线* @author WHD**/public class Test2 {public static void main(String[] args) {System.out.println("床前明月光");printSign(); // 方法调用 直接在调用处书写方法名称即可System.out.println("疑是地上霜");printSign();System.out.println("举头望明月");printSign();System.out.println("低头思故乡");printSign();}/*** 定义方法* public static void开头 表示公开的 静态的 无返回值的方法*/public static void printSign() {for (int i = 0; i < 10; i++) {System.out.print("-");}System.out.println();}}
2.3 形参和实参
观察我们之前编写的方法,可以实现打印十个横线,但是不能灵活的控制字符的个数,以及字符的类型,所以我们可以使用有参数的方法来实现这个效果 形参:方法定义的时候书写的参数,规定了参数的个数、类型、顺序 实参:方法调用的时候传入的参数,遵守形参的规定
1.用户可以指定符号的个数
package com.qfedu.test4;/*** 新的需求:* 1.用户可以指定符号的个数* @author WHD**/public class Test1 {public static void main(String[] args) {System.out.println("床前明月光");printSign(10); // 10为实参(实际参数) 必须遵守形参的约定 参数的个数、类型、顺序System.out.println("疑是地上霜");int num1 = 5;printSign(num1);System.out.println("举头望明月");int a = 5;int b = 10;printSign(a + b);System.out.println("低头思故乡");printSign(3);}/*** num表示形参(形式参数)* 形参规定了参数的个数、类型、顺序* 表示实参必须遵守这个规定* @param num*/public static void printSign(int num) {for(int i =1;i <= num;i++) {System.out.print("-");}System.out.println();}}
2.用户可以指定符号的类型
package com.qfedu.test4;/*** 新的需求:* 2.用户可以指定符号的类型* @author WHD**/public class Test2 {public static void main(String[] args) {System.out.println("床前明月光");printSign('%');System.out.println("疑是地上霜");char sign = '^';printSign(sign);System.out.println("举头望明月");char ch1 = 65;printSign(ch1);System.out.println("低头思故乡");printSign((char)66);}public static void printSign(char sign) {for(int i = 1;i <= 10;i++) {System.out.print(sign);}System.out.println();}}
3.将前两个需求结合起来 用户可以控制字符的个数 和 类型
package com.qfedu.test4;/*** 3.将前两个需求结合起来 用户可以控制字符的个数 和 类型* @author WHD**/public class Test3 {public static void main(String[] args) {System.out.println("床前明月光");printSign(10,'&');System.out.println("疑是地上霜");int num1 = 5;printSign(num1,'&');System.out.println("举头望明月");printSign(4,'*');System.out.println("低头思故乡");printSign(3,'$');}/*** 形参:规定了参数的个数、类型、顺序* 表示实参必须遵守这个规定* @param num* @param sign*/public static void printSign(int num,char sign) {for(int i = 1;i <= num;i++) {System.out.print(sign);}System.out.println();}}
2.4 返回值和返回值类型
void表示方法没有任何返回值,如果需要方法执行完毕以后有返回值给调用者,必须使用其他的类型来代替void 可以书写的类型:八种基本数据类型,引用数据类型 return表示中断方法并且返回内容
return关键字用法1:如果返回值类型不是void,必须使用return关键字返回对应类型的数据
package com.qfedu.test5;/*** 编写方法模拟计算器两个数加法* 得到最终值以后乘以10* return 返回* 如果方法的声明返回值类型不是void 那么必须在方法的末尾加上return关键字并且 返回对应类型的值* return关键字表示中断方法并且返回内容* @author WHD**/public class Test1 {public static void main(String[] args) {add(10,20);int a = 30;int sum = addtion(11,22);System.out.println(sum * 10);}public static void add(int numa,int numb) {System.out.println(numa + numb);}public static int addtion(int a,int b){int sum = a + b;return sum;// return sum;不可达代码// System.out.println(); 不可达代码}}
return关键字用法2: 如果需要在分支结构中return值,必须保证每一种都有返回值
package com.qfedu.test5;/*** 编写方法判断数字是奇数还是偶数** 如果需要在分支结构中return值 那么必须保证每一种情况都有返回值* @author WHD**/public class Test2 {public static void main(String[] args) {System.out.println(isEven(11));System.out.println(guessNum(11));}public static boolean guessNum(int num) {if(num % 2 == 0) {return true;}return false;}public static String isEven(int num) {if(num % 2 == 0) {return "偶数";}return "奇数";}}
return关键字用法3:在返回值类型为void的方法中return 此时return只表示中断方法,并且return关键字之后不能有任何内容
package com.qfedu.test5;/*** 在返回值类型为void的情况 使用return表示中断方法* return关键字之后不能加任何内容* @author WHD**/public class Test3 {public static void main(String[] args) {m1();}public static void m1() {for (int i = 0; i < 50; i++) {if(i == 20) {return; // 注意return和break的区别 break只是中断循环 return中断方法}System.out.println(i);}System.out.println("方法执行结束");}}
2.5 多级调用
方法与方法之间可以互相调用,直接书写方法名称即可。执行规则,遇到方法先将方法执行完,再接着执行后续代码。
package com.qfedu.test5;public class Test4 {public static void main(String[] args) {m1();}public static void m1() {System.out.println("m1 方法开始执行");m2();System.out.println("m1方法执行结束");}public static void m2() {System.out.println("m2方法开始");System.out.println("m2方法结束");}}
