三要素:
(1)方法名称:
(2)是否有未知数据参加运算:
(3)是否产生结果数据:
方法不调用,不执行
调用格式:
//把调用方法后,产生的结果数据赋值给左侧的变量
数据类型 变量名称 = 方法名称(参数列表...);
定义方法,判断一个字符是否是字母
}
public class Demo02DefineMethod {
public static void main(String[] args) {
//定义char变量,并初始化
char c = 'A';
//调用isChar方法,把结果保存到boolean变量flag中
boolean flag = isChar(c);
System.out.println(flag);
}
/*
2.定义方法,判断一个字符是否是字母
*/
public static boolean isChar(char ch) {
if((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z')) {
return true;
}
return false;
}
}
/*
4.定义方法,计算一个int数组的和
*/
public static int getArraySum(int[] array) {
int sum = 0;
for(int i = 0;i<array.length;i++) {
sum += array[i];
}
return sum;
}
public class Demo05DefineMethod {
public static void main(String[] args) {
//定义int数组arr,并初始化
int[] arr = {10, 20, 30};
//定义int数组arr2,并初始化
int[] arr2 = {100, 200, 300};
//调用isSame方法
boolean flag = isSame(arr,arr2);
System.out.println(flag);
}
/*
5.定义方法,计算两个int数组是否相同
*/
public static boolean isSame(int[] arrayA, int[] arrayB) {
if(arrayA.length != arrayB.length) {
return false;
}
for(int i = 0;i<arrayA.length;i++) {
if(arrayA[i] != arrayB[i]) {
return false;
}
}
return true;
}
}
/*
方法
1.概念: 就是功能,把一段具有特殊功能的代码,使用{}括起来,起了个名字,添加额外的修饰符,方便调用
2.格式:
修饰符 返回值类型 方法名称(参数列表...) {
方法体;//就是完成特殊功能的一段功能代码;
return 结果数据;
}
3.格式解释:
(1)修饰符: 目前固定写法public static ,先记住
(2)返回值类型: 方法内部功能代码执行完毕后,产生的结果数据的具体类型
(3)方法名称: 就是一个标识符,给方法起个名字,方便调用
(4)参数列表: 本质就是在定义一个/多个变量,用来接收调用者调用方法时传递的数据
(5)方法体: 完成特殊功能的一段代码
(6)return 结果数据:
a.结束方法
b.把结果数据返回给方法的调用者
4.注意:
方法定义后,不调用不执行
如果调用,可以调用任意多次
调用格式:
数据类型 变量名称 = 方法名称(参数列表...);
5.定义方法的三要素:
(1)方法名称: 就是给方法起个名字,方便调用
(2)是否有未知数据参加运算: 参数列表
(3)是否产生结果数据: 返回值类型
*/
public class Demo02 {
//定义main方法
public static void main(String[] args) {
int m = 10, n = 20;
int sum = getSum(m, n);
System.out.println("和: " + sum);
int i = 100, j = 200;
int sum2 = getSum(i, j);
System.out.println("和: " + sum2);
}
/*
定义方法,计算两个int数据之和
1.方法的名字: getSum
2.参数列表:
int a, int b: 使用该方法时,需要传递两个int数据
3.返回值类型: int
*/
/*
你必须通过getSum这个名字来调用我这个功能
你调用我这个功能必须给我传递两个int数据
我的功能代码执行完毕后,必须给你返回一个int数据
*/
public static int getSum(int a, int b) {
int result = a + b;
return result;//结束方法,把结果数据result返回给调用处、者
}
}
/*
需求:
1.定义方法,计算两个double数据的最小值
三要素:
(1)方法名称: getMin
(2)是否有未知数据参加运算: double a, double b
(3)是否产生结果数据: double
数据类型 变量名称 = 方法名称(参数列表...);
*/
public class Demo01DefineMethod {
public static void main(String[] args) {
//调用方法,传递变量
double i = 1.0, j = 2.0;
double result = getMin(i, j);
System.out.println("最小值: " + result);
//调用方法,传递常量
double result2 = getMin(8.8, 6.6);
System.out.println("最小值: " + result2);
}
/*
1.定义方法,计算两个double数据的最小值
*/
public static double getMin(double a, double b) {
//使用三元运算符
double min = (a < b) ? a : b;
return min;//结束方法,把结果数据min返回给方法的调用处
}
}
/*
需求:
2.定义方法,判断一个字符是否是字母
三要素:
(1)方法名称: isZiMu
(2)是否有未知数据参加运算: char ch
(3)是否产生结果数据: boolean
*/
public class Demo02DefineMethod {
public static void main(String[] args) {
//调用方法,传递变量
char c = 'd';
boolean flag = isZiMu(c);
System.out.println("是否是字母: " + flag);
//调用方法,传递常量
//直接输出结果
System.out.println("e是否是字母: " + isZiMu('e'));
}
/*
2.定义方法,判断一个字符是否是字母
*/
public static boolean isZiMu(char ch) {
//字母包含: 小写字母/大写字母
if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {
return true;
}
//代码执行到这里,说明不是字母
return false;//结束方法,把结果数据false返回给方法的调用处
}
}
/*
需求:
3.定义方法,判断一个int数字是否是偶数
三要素:
(1)方法名称: isOu
(2)是否有未知数据参加运算: int num
(3)是否产生结果数据: boolean
*/
public class Demo03DefineMethod {
public static void main(String[] args) {
//调用方法,传递变量
int a = 10;
boolean result = isOu(a);
System.out.println(a + "是否是偶数? " + result);
//调用方法,传递常量
System.out.println("11是否是偶数? " + isOu(11));
}
/*
3.定义方法,判断一个int数字是否是偶数
*/
public static boolean isOu(int num) {
/*if (num % 2 == 0) {
return true;
} else {
return false;
}*/
if (num % 2 == 0) {
return true;
}
//代码执行到这里说明是奇数
return false;//结束方法,把结果数据false返回给方法的调用处
}
}
需求:
4.定义方法,计算一个int数组的和
三要素:
(1)方法名称: getArraySum
(2)是否有未知数据参加运算: int[] array
(3)是否产生结果数据: int
*/
public class Demo04DefineMethod {
public static void main(String[] args) {
//定义int数组arr,并初始化
int[] arr = new int[]{100, 200, 300};
//调用方法,传递数组arr,获取结果保存int变量result中
int result = getArraySum(arr);
System.out.println("数组元素之和: " + result);
}
/*
4.定义方法,计算一个int数组的和
*/
public static int getArraySum(int[] array) {
int sum = 0;
for (int i = 0; i < array.length; i++) {
sum = sum + array[i];
}
return sum;//结束方法,把结果数据sum返回给方法的调用处
}
}
需求:
5.定义方法,计算两个int数组是否相同
三要素:
(1)方法名称: isSameArray
(2)是否有未知数据参加运算: int[] arrayA, int[] arrayB
(3)是否产生结果数据: boolean
数组相同的含义?
任意相同索引下的两个元素值相同
只要有一个索引下的两个元素不同,则认为这两个数组是不同的
*/
public class Demo05DefineMethod {
public static void main(String[] args) {
//定义两个int数组
int[] arrA = new int[]{10, 20, 30};
//int[] arrA = null;
int[] arrB = new int[]{10, 20, 30};
//int[] arrB = null;
//调用方法,传递两个int数组,获取boolean结果
boolean result = isSameArray(arrA, arrB);
System.out.println("两个数组是否相同? " + result);
}
/*
5.定义方法,计算两个int数组是否相同
*/
public static boolean isSameArray(int[] arrayA, int[] arrayB) {
//如果两个null,直接返回true
//如果arrayA和arrayB保存的地址值是相同的,说明传递过来的是同一个数组,直接返回true
if (arrayA == arrayB) {
return true;
}
//非空判断,只要有一个是null,直接返回false
if (arrayA == null || arrayB == null) {
return false;
}
//代码执行到这里,说明传递的数组一定不是null
//获取数组的长度
int len = arrayA.length;
//长度不相同,内容一定不相同
if (len != arrayB.length) {
return false;
}
//长度相同,遍历数组
for (int i = 0; i < len; i++) {
//只要有一个索引下的两个元素不同,则认为这两个数组是不同的
if (arrayA[i] != arrayB[i]) {
return false;
}
}
//代码执行到这里,说明两个数组是相同的
return true;//结束方法,把结果数据true返回给方法的调用处
}
}
需求:
5.定义方法,计算两个int数组是否相同
三要素:
(1)方法名称: isSameArray
(2)是否有未知数据参加运算: int[] arrayA, int[] arrayB
(3)是否产生结果数据: boolean
数组相同的含义?
任意相同索引下的两个元素值相同
只要有一个索引下的两个元素不同,则认为这两个数组是不同的
*/
public class Demo06DefineMethod {
public static void main(String[] args) {
//定义两个int数组
int[] arrA = new int[]{10, 200, 30};
//int[] arrA = null;
int[] arrB = new int[]{10, 20, 300};
//int[] arrB = null;
//调用方法,传递两个int数组,获取boolean结果
boolean result = isSameArray(arrA, arrB);
System.out.println("两个数组是否相同? " + result);
}
/*
5.定义方法,计算两个int数组是否相同
*/
public static boolean isSameArray(int[] arrayA, int[] arrayB) {
//长度不相同,内容一定不相同
if (arrayA.length != arrayB.length) {
return false;
}
//长度相同,遍历数组
for (int i = 0; i < arrayA.length; i++) {
//只要有一个索引下的两个元素不同,则认为这两个数组是不同的
if (arrayA[i] != arrayB[i]) {
return false;
}
}
//代码执行到这里,说明两个数组是相同的
return true;//结束方法,把结果数据true返回给方法的调用处
}
}
/*
定义方法计算两个int数据的最大值
三要素:
(1)方法名称: getMax
(2)是否有未知数据参加运算: int a, int b
(3)是否产生结果数据: int
*/
public class Demo03MethodMax {
public static void main(String[] args) {
System.out.println("main...start...");
//定义两个int变量m,n并初始化
int m = 50, n = 100;
//调用方法获取最大值,保存int变量result中
int result = getMax(m, n);
System.out.println("数字: " + m + "和" + n + "的最大值: " + result);
System.out.println("main...end...");
}
/*
定义方法计算两个int数据的最大值
三要素:
(1)方法名称: getMax
(2)是否有未知数据参加运算: int a, int b
(3)是否产生结果数据: int
*/
public static int getMax(int a, int b) {
//使用三元运算符计算a和b的最大值
int max = (a > b) ? a : b;
return max;//结束方法,把结果数据max返回给方法的调用处/者
}
}
/*
计算一个int数据是否是偶数
*/
public class Demo04MethodOu {
public static void main(String[] args) {
System.out.println("main...start...");
//定义int变量a,初始值10
int a = 10;
//调用方法传递int变量a,获取boolean结果保存boolean变量flag中
boolean flag = isOu(a);
System.out.println(a + "是偶数吗? " + flag);
//调用方法传递常量,获取boolean结果保存boolean变量flag2中
boolean flag2 = isOu(11);
System.out.println("11是偶数吗? " + flag2);
System.out.println("main...end...");
}
/*
计算一个int数据是否是偶数
三要素:
(1)方法名称: isOu
(2)是否有未知数据参加运算: int num
(3)是否产生结果数据: boolean
*/
public static boolean isOu(int num) {
boolean result = (num % 2 == 0) ? true : false;
return result;//结束方法,把结果数据result返回给方法的调用处/者
}
}
/*
需求:
定义方法,打印从数字1到指定大于1的int数字范围内的所有数字
三要素:
(1)方法名称: printNumber
(2)是否有未知数据参加运算: int maxNum
(3)是否产生结果数据: 只是输出数字而已,没有具体的运算,也没有产生运算后的结果
没有结果数据,不需要返回结果数据给调用处/者,此处返回值类型必须固定写为void
注意:
1.分析需求时,发现方法内部没有产生具体的结果数据,返回值类型必须写成void
2.方法内部可以写return ; 但是建议省略,绝对不能写 return 数据;
3.规律: 分析需求时,发现有打印/输出/遍历二字时,该方法一般不需要有返回值,返回值类型固定写为void
没有返回值的方法的调用:
方法名称(参数列表...);
*/
public class Demo05PrintNum {
public static void main(String[] args) {
int a = 5;
//调用方法传递变量
printNumber(a);
System.out.println("-----------");
//调用方法传递常量
printNumber(3);
}
/*
定义方法,打印从数字1到指定大于1的int数字范围内的所有数字
三要素:
(1)方法名称: printNumber
(2)是否有未知数据参加运算: int maxNum
(3)是否产生结果数据: 只是输出数字而已,没有具体的运算,也没有产生运算后的结果
没有结果数据,不需要返回结果数据给调用处/者,此处返回值类型必须固定写为void
*/
public static void printNumber(int maxNum) {//void: 表示空的意思
for (int i = 1; i <= maxNum; i++) {
System.out.println(i);
}
//return ;//结束方法,返回调用处(但是没有带回任何结果数据),建议省略
}
}
/*
需求:
定义方法,将一个int数字指定给(赋值给)一个int数组的每个元素
三要素:
(1)方法名称: fillArray
(2)是否有未知数据参加运算: int value,int[] array
int value: 给数组的每个元素赋的值
int[] array: 接收被赋值的数组
(3)是否产生结果数据:
因为调用方法时,传递的是数组的内存地址,通过该地址找到数组后,给每个元素赋值
赋值完毕后就可以了,不需要返回数组,因为数组是人家传递给我们的,人家是知道该数组的地址的,
不需要再返回 返回值类型必须写为void
注意:
1.分析需求时,发现方法内部没有产生具体的结果数据,返回值类型必须写成void
2.方法内部可以写return ; 但是建议省略,绝对不能写 return 数据;
3.规律: 分析需求时,发现有打印/输出/遍历二字时,该方法一般不需要有返回值,返回值类型固定写为void
4.数组变量保存的是数组容器在堆内存中的地址值,所以作为方法参数传递的是内存地址值
*/
public class Demo06FillArray {
public static void main(String[] args) {
int num = 10;
int[] arr = new int[3];
System.out.println("----数组元素默认值----");
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
System.out.println("----调用方法把每个元素赋值后----");
fillArray(num,arr);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
/*
定义方法,将一个int数字指定给一个int数组的每个元素
三要素:
(1)方法名称:
(2)是否有未知数据参加运算:
(3)是否产生结果数据:
*/
public static void fillArray(int value, int[] array) {
//遍历数组
for (int i = 0; i < array.length; i++) {
//把每个元素赋值为value
array[i] = value;
}
return;//结束方法,返回调用处
}
}
/*
需求:
定义方法,介绍黑马程序员昌平校区的地址
"北京市昌平区西三旗产业园金燕龙教学楼"
三要素:
(1)方法名称: printAddress
(2)是否有未知数据参加运算: 没有,不需要定义参数列表,但是必须保留()
(3)是否产生结果数据: 没有,返回值类型必须写为void
注意:
1.分析需求时,发现方法内部没有产生具体的结果数据,返回值类型必须写成void
2.方法内部可以写return ; 但是建议省略,绝对不能写 return 数据;
3.规律: 分析需求时,发现有打印/输出/遍历二字时,该方法一般不需要有返回值,返回值类型固定写为void
没有返回值没有参数的方法调用
方法名称();
*/
public class Demo07PrintInfo {
public static void main(String[] args) {
System.out.println("main...start...");
//调用方法,打印信息
printAddress();
System.out.println("main...end...");
}
public static void printAddress() {
System.out.println("北京市昌平区西三旗产业园金燕龙教学楼");
return;//结束方法,返回调用处
}
}
/*
方法的注意事项:
1.方法不能嵌套定义,可以嵌套调用
2.返回值类型,必须要和return语句返回的类型匹配,否则编译失败 。
3.不能在return 后面写代码,return 意味着方法结束,所有后面的代码永远不会执行,属于无效代码。
4.void表示无返回值,可以省略return,也可以单独的书写return,后面不加数据
*/
public class Demo04MethodNotice {
public static void main(String[] args) {
//调用方法获取int数字
int number = getNum();
//调用方法传递int数字
printNum(number);
//嵌套调用方法
printNum(getNum());
}
//定义方法a
public static void a() {
//错误: 方法不能嵌套定义
/*public static void b() {
}*/
}
//定义方法返回int数字
public static int getNum() {
return 10;
}
//定义方法打印int变量
public static void printNum(int num) {
System.out.println(num);
}
}
import java.util.Scanner;
/*
方法的注意事项:
1.方法不能嵌套定义
2.返回值类型,必须要和return语句返回的类型匹配,否则编译失败 。
3.不能在return 后面写代码,return 意味着方法结束,所有后面的代码永远不会执行,属于无效代码。
4.void表示无返回值,可以省略return,也可以单独的书写return,后面不加数据的书写return,后面不加数据
注意:
1.方法的参数可以有(1个/2个/3个/...),可以没有(0个),可以是基本类型,也可是引用类型,具体情况根据需求分析
2.方法的返回值类型可以有,也可以没有,可以是基本类型,也可以是引用类型,具体情况根据需求分析
方法如果有返回值的话,返回值必须只能有一个
*/
public class Demo05MethodNotice {
public static void main(String[] args) {
}
//2.返回值类型,必须要和return语句返回的类型匹配,否则编译失败
public static int getNum() {
return 10;//正确: 数字10默认就是int类型
//return 10L;//正确: 数字10L是long类型数字,不能直接当成int用
//return 'a';//正确: 字符'a'可以当成int使用,查ASCII码表
//return (byte)100;//正确: byte数据可以当成int使用,发生自动类型转换
//return 6.6;//错误: 小数6.6默认是double类型,不能直接当成int用
}
public static int getMax(int a, int b) {
if (a > b) {
return a;
//错误: 属于无效代码,永远不可能被执行
//System.out.println("-----------");
} else {
return b;
//错误: 属于无效代码,永远不可能被执行
//System.out.println("-----------");
}
//错误: 属于无效代码,永远不可能被执行
//System.out.println("----------");
}
//1.方法的参数可以有(1个/2个/3个/...),可以没有(0个),可以是基本类型,也可是引用类型,具体情况根据需求分析
public static void a(){}
public static void a2(int a){}
public static void a3(int[] a){}
public static void a4(int a, int[] b, Scanner sc){}
//2.方法的返回值类型可以有,也可以没有,可以是基本类型,也可以是引用类型,具体情况根据需求分析
//方法如果有返回值的话,返回值必须只能有一个
public static void b(){}
public static int b2(){return 0;}
public static Scanner b3(){return null;}
public static int[] b4() {
int[] arr = new int[] {10,20,30};
return arr;
}
}
/*
有返回值的方法的调用
1.赋值调用: 把调用有返回值方法的返回的结果赋值给左侧的变量 ---推荐使用---
数据类型 变量名称 = 方法名称(参数列表....)
2.打印/输出调用: 把调用有返回值方法的返回的结果直接交给输出语句
System.out.println(方法名称(参数列表....));
3.单独/独立/直接调用: 直接调用有返回值方法,对结果数据没有任何处理(丢失了结果) ---不推荐使用---
方法名称(参数列表....);
*/
public class Demo06MethodInvoke {
public static void main(String[] args) {
int m = 10, n = 20;
//1.赋值调用方法,传递变量
int result = getSum(m, n);
System.out.println("和: " + result);
//2.赋值调用方法,传递常量
int result2 = getSum(10, 20);
System.out.println("和: " + result2);
//3.输出调用方法,传递变量
System.out.println("和: " + getSum(m, n));
//4.输出调用方法,传递常量
System.out.println("和: " + getSum(10, 20));
int i = 1000,j = 2000;
//5.单独调用方法,传递变量
getSum(i,j);
//6.单独调用方法,传递常量
getSum(1000, 2000);
}
//定义方法,计算2个int数据的和
public static int getSum(int a, int b) {//形式参数
int sum = a + b;
return sum;
}
}
/*
无返回值的方法调用方式
1.单独/独立/直接调用: 直接调用有返回值方法,对结果数据没有任何处理 ---只能使用这种方式---
方法名称(参数列表....);
2.赋值调用: 把调用有返回值方法的返回的结果赋值给左侧的变量 ---代码语法格式错误---
3.打印/输出调用: 把调用有返回值方法的返回的结果直接交给输出语句 ---代码语法格式错误---
*/
public class Demo07MethodInvoke {
public static void main(String[] args) {
int i = 1000,j = 2000;
//5.单独调用方法,传递变量
getSum(i,j);//实际参数: 是在调用方法时()中指定的变量,此时该变量必须有值,否则报错
//6.单独调用方法,传递常量
getSum(1000, 2000);//实际参数: 是在调用方法时()中指定的常量
}
//定义方法,打印2个int数据的和
public static void getSum(int a, int b) {//形式参数: 是在定义方法时,()中定义的变量,此时没有值,也不能给值
int sum = a + b;
System.out.println(sum);
return;
}
}
/*
循环嵌套
1.概念: 使用一个循环作为另外一个循环的循环体
里面的循环叫做内层循环,外面的循环叫做外层循环
2.格式:
for(外初始化表达式1;外循环条件2;外步进表达式7){
for(内初始化表达式3;内循环条件4;内步进表达式6){
内循环体5;
}
}
3.注意:
(1)外层循环初始化表达式执行几次? 1次
(2)内层循环初始化表达式执行几次? 3次
(3)内层循环体代码执行几次?
外层循环次数 * 内层循环每遍执行的次数 = 3*5 = 15
(4)外层循环执行一次,内层循环执行完整的一遍
*/
public class Demo05ForFor {
public static void main(String[] args) {
/*
输出3行5列的星
*/
System.out.println("*****");
System.out.println("*****");
System.out.println("*****");
System.out.println("----------------");
//问题: 代码重复,如果输出行数比较多的话,数不过来了吧
for (int i = 1; i <= 3; i++) {
System.out.println("*****");
}
System.out.println("----------------");
//问题: 如果每行的星的数量非常多的话,数不过来了吧
for (int i = 1; i <= 3; i++) {//外层循环: 控制行数
for (int j = 1; j <= 5; j++) {//内层循环: 控制列数
System.out.print("*");
}
System.out.println();//换行
}
}
}
/*
输出2021年到2023年的所有的月份
*/
public class Demo06ForForMonth {
public static void main(String[] args) {
//外层循环: 控制年份
for (int year = 2021; year <= 2023; year++) {
//内层循环: 控制每年的月份,每一年都有12个月
for (int month = 1; month <= 12; month++) {
System.out.println(year + "年" + month + "月");
}
}
System.out.println("game...over...");
}
}
/*
输出九九乘法表
*/
public class Demo07CFB {
public static void main(String[] args) {
/*
输出9行9列的*
*********
*********
*********
*********
*********
*********
*********
*********
*********
*/
for (int i = 1; i <= 9; i++) {//外层循环: 控制行数
for (int j = 1; j <= 9; j++) {//内层循环: 控制每行输出的列数
System.out.print("*");
}
System.out.println();
}
System.out.println("-------------------------------------------");
/*
如果能打印出下面的直角三角形来的话,只需要把*号替换成对应的表达式
*
**
***
****
*****
******
*******
********
*********
*/
for (int i = 1; i <= 9; i++) {//外层循环: 控制行数
for (int j = 1; j <= i; j++) {//内层循环: 控制每行输出的列数
System.out.print("*");
}
System.out.println();
}
System.out.println("-------------------------------------------");
/*
把上面的*号替换成对应的表达式
\t: 就是键盘上的tab键,叫做制表符,大的空格
*/
for (int i = 1; i <= 9; i++) {//外层循环: 控制行数
for (int j = 1; j <= i; j++) {//内层循环: 控制每行输出的列数
System.out.print(j + "×" + i + "=" + j * i + "\t");
}
System.out.println();
}
}
}