多重循环和方法
1.程序调试
程序调试debug模式属于我们在日常开发中解决问题最笨,但是也是最有效的方式
此处有图片
此处有图片
2.多重循环
循环与循环之间可以互相嵌套,没有上限,通常不超过三层,外层循环变量变化一次,内
层循环变量变化一轮;
(在打印图形的时候:)
1.外层循环控制行数
2.内层循环控制列数
3.打印倒三角或者正三角的时候 第一行需要几个图案 我们计数器就从几开始
4.观察当前图案元素的个数如果是越来越多 计数器自增 如果是 越来越少 计数器自减
5.当我们的计数器 自减的时候 判断条件一定要大于某个值 当我们的计数器自增的时候
一定要小于某个值,否则会在造成死循环
6.打印倒三角的时候,属于依次递减的 所以我们的判断条件不是固定的 否则就是矩形,
我们就找一个每次都在变化的内容,而且的递增的 我们的外层循环变量 i 非常适合 这个角色
package com.qfedu.test1;
/**
* 打印平行四边形
* @author WHD
*
*/
public class Test3 {
public static void main(String[] args) {
// 经过分析
// 1. 外层循环 控制行数 先编写一个循环5次的外层循环
// 2.打印倒三角或者正三件的时候 第一行需要几个图案 我们计数器就从几开始
// 3.观察当前图案元素的个数是越来越多 计数器自增 还是 越来越少 计数器 自减
// 4.当我们的计数器 自减的时候 判断条件一定要大于某个值 当我们的计数器自增的时候 一定要小于某个值
// 否则就会造成死循环
// 5.左上角的倒三角属于依次递减的 所以我们的判断条件不能是固定的 否则就是矩形
// 我们就找一个每次都在变换的内容 而且的递增的 我们的外层循环变量 i 非常适合 这个角色
for(int i = 1; i <= 5; i++) {
// 第一部分
for (int j = 5; j >= 0; j--) {
System.out.print(" ");
}
// 第二部分
for (int j = 1; j <= 5; j++) {
System.out.print("*");
}
// 第三部分
System.out.println();
}
}
}
package com.qfedu.test1;
/**
* 打印正三角形
* @author WHD
*
*/
public class Test4 {
public static void main(String[] args) {
// 1. 外层循环 控制行数 先编写一个循环N次的外层循环
// 2.打印倒三角或者正三件的时候 第一行需要几个图案 我们计数器就从几开始
// 3.观察当前图案元素的个数是越来越多 计数器自增 还是 越来越少 计数器 自减
// 4.当我们的计数器 自减的时候 判断条件一定要大于某个值 当我们的计数器自增的时候 一定要小于某个值
// 否则就会造成死循环
// 5.左上角的倒三角属于依次递减的 所以我们的判断条件不能是固定的 否则就是矩形
// 我们就找一个每次都在变换的内容 而且的递增的 我们的外层循环变量 i 非常适合 这个角色
for (int i = 1; i <= 5; i++) {
// 第一部分 左上角空白
for (int j = 5; j >= i; j--) {
System.out.print(" ");
}
// 第二部分 正三角
for (int j = 1; j <= 2 * i -1; j ++) {
System.out.print("*");
}
// 第三部分 换行
System.out.println();
}
}
}
3.静态方法
3.1方法的概念和作用
方法是一系列代码指令的集合,用于解决特定的问题,可以重复调用,实现代码的可重复性
3.2方法的定义
public static 返回值类型 方法名称(形参列表){
//方法体
}
package com.qfedu.test4;
/**
* 方法的定义
* @author WHD
*
*/
public class Test3 {
/**
* 访问修饰符 + static关键字 + 返回值类型 + 方法名称(形参列表){
* 方法体
* }
*/
public static void m1() {
}
}
3.3方法的形参和实参
形参:形式参数,表示在定义方法时书写的参数,相当于局部变量的声明,形参没有个数
上限,形参规定了参数的个数,类型,顺序,这些规定实参必须遵守,也就是实参必须和
符合形参的约束
实参:实际参数,必须遵循形参的约定,可以写对应类型的变量,也可以写对应类型的值
package com.qfedu.test3;
public class Test3 {
public static void main(String[] args) {
login("admin", "zz8888"); // 这里的admin 和 zz8888 属于实参
}
/**
* userName 和 password都属于形参
* 规定了参数的类型 两个都是String类型
* 参数的个数 两个
* 顺序 必须按照第一个是String,第二个也是String的顺序
* @param userName
* @param password
*/
public static void login(String userName,String password) {
if(userName.equals("admin") && password.equals("zz8888")) {
System.out.println("登录成功");
}else {
System.out.println("用户名或者密码错误");
}
}
}
3.4返回值和返回值类型
我们书写的方法如果需要在执行方法以后得到一些内容,那么我们就需要对定义的方法加上返回值:
返回值类型书写位置:public static 返回值类型
返回值可以书写的类型:八种基本数据类型,String,void(表示无返回值)
返回值是写的位置:
使用return关键字来返回值
需求:
1.return之后的value(值)必须和返回值类型匹配
2.在分支结构情况下,必须保证每一个分支下都有返回值
3.在返回值类型为void的方法中,可以使用return,只表示结束方法,但是return以后不能写任何内容
package com.qfedu.test4;
/**
* 编写两个方法
* 1.用于实现用户登录的功能,必须让用户提供两个参数,一个是用户名,另外一个是密码
* 2.用于实现查看所有人员信息的方法,但是在调用此方法之前必须先判断用户是否登录了
* @author WHD
*
*/
public class Test4 {
public static boolean login(String userName,String password) {
if(userName.equals("admin") && password.equals("zz1234")) {
// System.out.println("登录成功");
return true;
}else {
// System.out.println("用户名或者密码错误");
return false;
}
}
public static void getAllInfo() {
if(login("admin", "zz1234")) { // login("admin", "zz12345") == true
System.out.println("人员1,信息1");
System.out.println("人员2,信息2");
System.out.println("人员3,信息3");
System.out.println("人员4,信息4");
}else {
System.out.println("请先登录");
}
}
public static void main(String[] args) {
getAllInfo();
}
}
// 返回值类型为void的情况下使用return
package com.qfedu.test3;
/**
* 回顾一个关键字 break break用于switch和循环中
* return关键字两种用法
* 在方法返回值为非void的情况下 表示结束方法并且返回内容 只能在方法的最后一句
* 在有选择结构的情况下 必须保证每一个分支下 都有return
* 在方法返回值为void的情况下 可以使用return 表示结束方法 return以后不能加任何内容
*
*
* @author WHD
*
*/
public class Test7 {
public static void main(String[] args) {
m1(20);
}
public static void m1(int numa) {
System.out.println("m1方法开始执行");
if(numa == 20) {
System.out.println("条件成立");
return;
// System.out.println("abcd"); return在这里表示结束方法 但是不会返回内容 因为本方法返回值类型为 void
}
System.out.println("m1方法执行完毕");
}
}
// 分支结构中必须保证每一个分支都有返回值
package com.qfedu.test3;
/**
* 编写一个方法 让用户传入一个数字
* 如果是奇数 返回字符串 奇数
* 如果是偶数 返回字符串 偶数
* 方法返回值不是void 那么我们可以直接打印或者定义对应类型的变量 来接收
* @author WHD
*
*/
public class Test6 {
public static void main(String[] args) {
System.out.println("直接输出方法得到的结果打印" + checkNum(21));
String result = checkNum(21);
System.out.println("通过变量接收到的结果打印" + result);
}
public static String checkNum(int num) {
if(num % 2 == 0) {
return "偶数";
}else if(num % 3 == 0) {
return "3的倍数";
}else {
return "abc"; // 这行代码纯粹为了演示 没有任何意义
}
}
}
3.5方法的多级调用
方法和方法之间可以互相调用
package com.qfedu.test3;
/**
* 多级调用 方法调方法
* @author WHD
*
*/
public class Test8 {
public static void main(String[] args) {
m1(); // 当我们调用m1方法 执行顺序为 1 3 4 2
}
public static void m1() {
System.out.println("m1方法开始执行"); // 1
m2();
System.out.println("m1方法执行完毕"); // 2
}
public static void m2() {
System.out.println("m2方法开始执行"); // 3
System.out.println("m2方法执行完毕"); // 4
}
}