六、循环嵌套+方法
1.循环嵌套
1.1打印菱形形状
/*
A
BBB
CCCCC
DDDDDDD
EEEEEEEEE
FFFFFFFFFFF
EEEEEEEEE
DDDDDDD
CCCCC
BBB
A
*/
public class NestedLoop {
public static void main(String[] args) {
int column = 9;
for (int i = 1; i <= column; i++) {
for (int j = column - i; j > 0; j--) {
System.out.print(" ");
}
for (int k = 1; k <= 2 * i - 1; k++) {
System.out.print((char) (i + 64));
}
System.out.println();
}
for (int i = 1; i <= column - 1; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(" ");
}
for (int k = 2 * (column - 1) - (2 * i - 1); k >= 1; k--) {
System.out.print((char) (column + 64 - i));
}
System.out.println();
}
}
}
分析
1.2打印花式菱形
/*
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
ABCDEFGFEDCBA
ABCDEFGHGFEDCBA
ABCDEFGHIHGFEDCBA
ABCDEFGHIJIHGFEDCBA
ABCDEFGHIHGFEDCBA
ABCDEFGHGFEDCBA
ABCDEFGFEDCBA
ABCDEFEDCBA
ABCDEDCBA
ABCDCBA
ABCBA
ABA
A
*/
public class NestedLoop2 {
public static void main(String[] args) {
int column = 10;
for (int i = 1; i <= column; i++) {
for (int j = column - i; j > 0; j--) {
System.out.print(" ");
}
for (int k = 0; k <= (2 * i - 1)/2; k++) {
System.out.print((char) (k + 65));
}
for (int k2 = i-1; k2 > 0; k2--) {
System.out.print((char)(64 + k2));
}
System.out.println();
}
for (int i = 1; i <= column - 1; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(" ");
}
for (int k = 1; k <= column - i; k++) {
System.out.print((char) (64 + k));
}
for (int k2 = column - i-1; k2 > 0; k2--) {
System.out.print((char)(64 + k2));
}
System.out.println();
}
}
}
2.方法
2.1方法定义格式
// main方法 Java中主方法格式
public static void main(String[] args) {
}
/*
void: 返回值类型 void 表示当前方法没有返回值
返回值类型是当前方法运行完成之后对方法外的一个返回数据
main: 方法名,方法名是一个名字,要求符合命名规范
小驼峰命名法,见名知意,动宾结构
(形式参数列表): 当前方法运行所需的外来数据,这里需要告知调用者数据类型
{}: 方法体
方法格式:
public static 返回值类型 方法名(形式参数列表) {
方法体
}
public static returnType methodName(Arguments) {
Method Body
}
*/
2.2方法实现过程
/**
* 文档注释
* 1. 对于方法的功能解释
* 2. 方法所需参数介绍
* 3. 方法返回值类型介绍和含义
* 4. 方法处理过程中出现的异常
*/
/**
* 展示打印到控制台一个Hello World
*/
public static void printHelloWorld() {
// 方法体
System.out.println("Hello World");
}
2.3无形式参数无返回值
public static void 方法名(){}
2.4有参数无返回值
/*
需求:
展示用户告知的int类型数据
用户调用该方法,传入一个int类型,在控制台打印展示int类型数据
方法分析:
固定格式:
public static
返回值类型:
展示打印一个int类型数据,不需要返回值!!!
void
方法名:
printIntNumber
小驼峰命名法,见名知意,动宾结构
形式参数列表:
该方法需要展示的数据是用户传入的,而且是int类型
(int num) 参数声明
int 是参数的数据类型
num 是参数的名字,可以认为是方法内的一个变量,可以供方法使用
【方法声明】
public static void printIntNumber(int num)
*/
/*
文档注释细节
1. @param num 是告知编译器,这里在解释方法参数num
2. 方法功能概述和之后的参数解释,返回值解释需要空一行,标准格式代码
3. 文档注释可以帮助我们后期更好的阅读代码
*/
/**
* 展示用户传入的int类型数据
*
* @param num 这里需要一个int类型数据
*/
public static void printIntNumber(int num) {
// 用户调用该方法时,会将数据存储于num中,展示num中的数据就OK了
System.out.println(num);
}
调用带有参数的方法注意事项
1. 方法如果需要参数,必须在调用过程中给予对应的参数
2. 方法如果没有给定参数,报错!!!编译不通过
3. 方法如果给定的实际参数,数据类型不符合形式参数列表要求的数据类型,报错!!!编译不通过,数据类型一致化问题!!!
4. 方法如果在调用的过程中给定的参数个数,不是方法所预期的参数个数,报错!!!编译不通过
2.5有返回值
关键字:return
返回
作用:
1. 结束当前方法的执行
2. 返回return之后的数据,到方法之外,要求返回值的数据和方法声明位置告知调用者的返回值数据类型一致
【数据类型一致化】
/*
无参数有返回值的方法
需求:
返回值一个大写字符 'A'
方法分析:
固定格式:
public static
返回值类型:
返回值数组为大写字符'A'
char类型数据
方法名:
giveMeLetter
形式参数列表:
方法需要返回一个字符A,不需要参数
()
方法声明:
public static char giveMeLetter()
*/
/**
* 该方法返回一个大写字符 'A'
*
* @return 返回值类型为char类型,返回的数据是一个大写字符 'A'
*/
public static char giveMeLetter() {
return 'A';
}
/*
有参数有返回值:
需求:
计算两个int类型数据之和,通过返回值返回到方法外
1. 可以从需求中获取到当前方法需要两个参数
2. 方法的返回值可以考虑使用int类型,或者long类型
方法分析:
固定格式:
public static 不要问
返回值类型:
int 可以使用,没有问题,符合人之常情的理解
long 可以满足如果出现两个int类型数据相加之后,结果超出了int类型范围,可
以使用long
方法名:
getSumOfTwoNumber
小驼峰命名法,见名知意,动宾结构
形式参数列表:
两个int类型数据之和,多个参数的情况下使用 逗号隔开
(数据类型1 参数名1, 数据类型2 参数名2 ...)
(int num1, int num2) 正确格式
方法声明:
public static int getSumOfTwoNumber(int num1, int num2)
*/
/**
* 该方法是传入两个int类型的数据,返回值是两数之和
*
* @param num1 int类型数据
* @param num2 int类型数据
* @return 返回值类型为int类型,是两个int类型数据之和
*/
public static int getSumOfTwoNumber(int num1, int num2) {
return num1 + num2;
}
3.局部变量
局部变量概念
除class大括号之外,其他大括号以内的变量都可以认为是一个局部变量。
方法大括号以内,if分支结构以内,switch case结构大括号以内,循环大括号以内
以上大括号以内全部都是【局部变量】
作用域
当前局部变量能够使用的范围在什么地方
局部变量有且只能在当前所处大括号以内使用,超出范围无法使用
生存期
局部变量的生存期也在大括号以内,和作用域一致。
注意:
1. 关注局部变量的作用域和生存期范围,两者同步,并且都在对应的大括号以内
2. 变量未定义不能使用,要保证代码执行的,从上至下,从左至右原则