今日内容
- 方法
- 数组基础
复习
0 if(){
}else{
}if(){
}else if(){
}else if(){
}else{
}
1 循环的四要素
初始值,控制条件,迭代,循环体2 迭代什么意思
迭代: 一次次的变化3 for循环执行流程
(小红旗)
for(int i = 1;i < 11;i++){
}
4 break,continue,return分别什么作用
- break,打断循环,终止循环
- continue,继续,暂停这一次循环,继续下一次循环
- return,结束方法,不是结束程序的,只不过如果结束的main方法,那么程序会结束
5 自己总结 变量在使用时的注意事项
(命名,作用域等)- 命名要见名知意,同一作用域内不能重名
- 变量的作用域: 最近的一对{}内
int a = 1;// 声明赋值变量
a = 2; // 可以重复使用
a =3;
int a = 3;// 重复定义
一、方法(method)
1.1 什么是方法
方法(method),其实就是一个函数(function),完成某个功能得到一个结果
直白点: 一段独立的代码,可以执行,执行过程中可以解决一些问题最后获得一个结果
也就是说,方法可以执行代码,用来解决问题
其实我们见过,main方法就是方法
1.2 为什么需要方法
我们已经有主方法,为什么还需要定义其他方法?因为现在写代码有些不方便的地方
- 现在所有代码都写在main方法内,代码就太多,太复杂 --> 冗余
- 想改代码时候,发现不好找 --> 不方便维护
- 代码都在主方法,为了读懂代码需要花很长时间 --> 不方便阅读代码
- 代码都在主方法内,一运行全部代码都运行 --> 代码之间不独立
- 代码都在主方法内,变量作用域就是主方法内,变量不能重复,就需要定义好多不同的变量 --> 代码不独立
所以方法好处:
- 每个方法都是独立代码块,可以单独运行
- 因为方法是独立,可以单独修改,单独运行,每个方法内变量也不冲突
1.3 怎么定义方法
其实我们见过方法,main方法就是一个
public static void main(String[] args){ } /* public static 这两个固定写法 void ,此处是方法要返回的数据的类型 void 单词是空的意思,该方法执行完没有返回值 main 此处是方法名, main单词是主要的意思,这是方法名 ,可以见名知意即可 () 参数列表,其中可以不写东西,叫做空参方法 如果()内有参数,就做有参方法 其实参数就是数据类型+变量名 {} 方法体,其中就写执行的代码 */
方法写哪? 类中,与其他方法平级,即方法不能嵌套定义,无论上下位置
方法如何执行? 方法定义完,必须在main内调用该方法,才能执行
1.4 演示
方法根据返回值和参数列表分为以下几种方法
- 无参数无返回值
- 有参数无返回值
- 无参数有返回值
- 有参数有返回值
1.4.1 无参无返回值方法
public static void 方法名(){} 这就是无参数无返回值的方法
- public static 是每个方法固定的
- void 单词是空, 代表就是方法执行后没有返回值
- 方法名 随便写,见名知意
- () 空参
需求: 设计方法,输出1-10
public static void main(String[] args) {
// 通过方法名+()调用方法,让其执行
printOne2Ten();
}
// 需求: 设计方法,输出1-10
public static void printOne2Ten(){
for (int i = 1; i < 11; i++) {
System.out.println(i );
}
}
需求: 设计方法,算出 一张纸的厚度是0.01mm 折叠多少次,达到珠穆拉玛峰高度(8848000mm)
public static void main(String[] args) {
// 通过方法名+()调用方法,让其执行
zhedie();
}
// 需求: 设计方法,算出 一张纸的厚度是0.01mm
// 折叠多少次,达到珠穆拉玛峰高度(8848000mm)
public static void zhedie(){
double houdu = 0.01;
int count = 0;
while (houdu <= 8848000) {
houdu = houdu * 2;
count++;
}
System.out.println("折叠"+count+"次,可以达到"+houdu+",>=珠穆拉玛峰高度(8848000mm)" );
}
// ps: 小经验: 当不知道循环次数用while,当已知循环次数,建议使用for
1.4.2 有参数无返回值
public static void 方法名(参数){}
- public static 固定
- void 此处是方法返回值,void是空,即不返回
- 方法名,随便定义
- () 内就是参数列表
- 参数,就是变量,写法 数据类型 变量名;
- 为什么需要参数? 方法设计参数,方法可以根据参数出现不同的效果
- 方法可以定义多个参数,多个参数之间用逗号,隔开
- {}
需求: 设计方法输出从1到指定数字
public static void main(String[] args) {
// 调用方法就是方法名+();
// 如果方法有参数,调用时需要给参数赋值
printNum(5);// 相当于是5赋值给方法参数a变量
System.out.println("--------" );
printNum(10);
}
// 需求: 设计方法输出从1到指定数字
// int a就是参数,其实就是变量,那么方法中就可以使用该变量
public static void printNum(int a){// a = 5
for (int i = 1; i <= a; i++) {
System.out.println(i );
}
}
需求: 设计方法,根据指定数量输出吃几碗饭
public static void main(String[] args) {
// 调用方法就是方法名+();
// 如果方法有参数,调用时需要给参数赋值
eat(4);
}
// 设计方法,根据指定数量输出吃几碗饭
public static void eat(int x){
System.out.println("吃 "+x+" 碗饭" );
}
// 设计方法,根据指定 菜名 吃饭
package com.qf.method;
/**
* |-----------------------------------------------
* | ____ _ _____ _ _ _ |
* | / __ \ (_) / ____|| | (_)(_) |
* || | | | _ _ _ | (___ | |__ _ _ _ _ |
* || | | || || | | | \___ \ | '_ \ | || || | | ||
* || |__| || || |_| | ____) || | | || || || |_| ||
* | \___\_\|_| \__,_||_____/ |_| |_||_|| | \__,_||
* | _/ | |
* | |__/ |
* |-----------------------------------------------
* | 天道酬勤 |
* | 代码敲烂 月薪过万 |
* L----------------------------------------------
*
* @desc
* 变量使用的3大步骤
* 1 声明(定义) 数据类型 变量名;
* 2 赋值 变量名 = 值;
* 3 使用, 输出/运算
*/
public class Demo3 {
public static void main(String[] args) {
// 调用方法就是方法名+();
// 如果方法有参数,调用时需要给参数赋值
diancai("铁锅炖大鹅");
}
// 设计方法,根据指定 菜名 吃饭
public static void diancai(String food) {
System.out.println("今天中午吃: <<" + food +">>" );
}
}
// 老板要让你算公司根据4个季度销售额,算出总销售额
public static void main(String[] args) {
// 方法有多个参数,传入参数不能多不能少,要按照个数顺序类型对应
sell(100.0,200.0,200.0,400.0);
}
// 老板要让你算公司根据4个季度销售额,算出总销售额
public static void sell(double a1,double a2,double a3,double a4){
double r = a1 + a2 + a3 + a4;
System.out.println("第一季度销售:" +a1 +"万元" );
System.out.println("第二季度销售:" +a2 +"万元" );
System.out.println("第三季度销售:" +a3 +"万元" );
System.out.println("第四季度销售:" +a4 +"万元" );
System.out.println("全年总销售额:" + r +"万元");
}
上面练习完整代码
package com.qf.method;
/*
* @desc
* 变量使用的3大步骤
* 1 声明(定义) 数据类型 变量名;
* 2 赋值 变量名 = 值;
* 3 使用, 输出/运算
*/
public class Demo3 {
public static void main(String[] args) {
// 调用方法就是方法名+();
// 如果方法有参数,调用时需要给参数赋值
printNum(5);// 相当于是5赋值给方法参数a变量
System.out.println("--------" );
printNum(10);
System.out.println("--------" );
eat(4);
System.out.println("--------" );
diancai("锅包肉");
diancai("铁锅炖大鹅");
System.out.println("--------" );
// 方法有多个参数,传入参数不能多不能少,要按照个数顺序类型对应
sell(100.0,200.0,200.0,400.0);
}
// 需求: 设计方法输出从1到指定数字
// int a就是参数,其实就是变量,那么方法中就可以使用该变量
public static void printNum(int a){// a = 5
for (int i = 1; i <= a; i++) {
System.out.println(i );
}
}
// 设计方法,根据指定数量输出吃几碗饭
public static void eat(int x){
System.out.println("吃 "+x+" 碗饭" );
}
// 设计方法,根据指定 菜名 吃饭
public static void diancai(String food) {
System.out.println("今天中午吃: <<" + food +">>" );
}
// 老板要让你算公司根据4个季度销售额,算出总销售额
public static void sell(double a1,double a2,double a3,double a4){
double r = a1 + a2 + a3 + a4;
System.out.println("第一季度销售:" +a1 +"万元" );
System.out.println("第二季度销售:" +a2 +"万元" );
System.out.println("第三季度销售:" +a3 +"万元" );
System.out.println("第四季度销售:" +a4 +"万元" );
System.out.println("全年总销售额:" + r +"万元");
}
}
1.4.3 无参有返回值
什么是返回值? 方法执行后返回的数据
为什么需要返回值? 有时候,方法执行后的数据,后续接着被其他代码使用
如何定义返回值?
public static 数据类型 方法名(){ return 值; }
- public static
- 第三个地方, 写的是方法的返回值数据类型
- 之前写void,是因为方法执行完不返回数据
- 如果方法执行完需要返回数据,此处就写对应数据的类型
- 第四个地方 方法名
- {} 方法体
- 特殊的,只要方法需要返回数据,就必须设置return + 值;
总结/结论:
- 方法定义时void,代码块里面不能写return+值;
- 方法定义时写了返回值数据类型,代码块里面就必须写retrun + 值;
需求: 设计一个方法,返回数字
其他类型返回值演示
public class Demo4 {
public static void main(String[] args) {
// 调用方法: 方法名+();
// 如果方法有返回值,就可以在左边使用变量存储返回值
int a = test();// test方法执行,返回100赋值给变量a
System.out.println(a );
System.out.println("----" );
String b = test2();
System.out.println(b );
System.out.println("----" );
double c = test3();
System.out.println(c );
System.out.println("-----" );
int d = zhedie( );
System.out.println("折叠次数:" +d );
}
// 单纯演示返回值
public static int test(){
System.out.println("这是无参有返回值的方法" );
return 100;// 返回值返回给调用者使用
}
public static String test2() {
return "ok";
}
public static double test3(){
return 6.66;
}
// 需求: 设计方法,算出 一张纸的厚度是0.01mm
// 折叠多少次,达到珠穆拉玛峰高度(8848000mm)
// 返回折叠次数
public static int zhedie(){
double houdu = 0.01;
int count = 0;
while (houdu <= 8848000) {
houdu *= 2;
count++;
}
return count;
}
}
1.4.4 有参数有返回值 【重点】
public static 返回值数据类型 方法名(数据类型 变量名,…) {
return 值;
}
// 设计方法,传入两个数字,返回他们的和(加法运算)
public static void main(String[] args) {
// int sum = jia(3, 2);
// System.out.println(sum );
}
// 设计方法,传入两个整数数字,返回他们的和(加法运算)
public static int jia(int a, int b) {
return a + b;
}
// 计算1+2-3+4-5
// 1+2-3+4-5
public static void main(String[] args) {
int r1 = jia(1, 2);// 加法
int r2 = jian(r1, 3);// 减法
int r3 = jia(r2, 4);// 加法
int r4 = jian(r3, 5);// 减法
System.out.println(r4);
}
// 设计方法,传入两个整数数字,返回他们的和(加法运算)
public static int jia(int a, int b) {
return a + b;
}
// 设计方法,传入两个整数,返回他们的差
public static int jian(int a, int b) {
return a - b;
}
1.5 方法的其他用法
- 方法定义完只能由主方法调用运行
- 其实方法间相互调用
执行结果
m1()
m2()
m3()
但是不能形成闭环调用!!! 容易造成堆栈内存溢出错误StackOverflowError
方法的返回值不是只能返回给主方法
而是方法的返回值返回给 方法的调用者,即谁调用返回给谁
二、数组(array)
2.1 数组介绍
数据的组合 – > 数组
存储多个数据的 就是 数组!
为什么还需要数组存储数据? 因为一个变量只能存储一个值,假设存储全村人的收入,那就要定义几百变量,太麻烦了…
java数组如何定义?
- 数据类型[] 数组名 = new 数据类型[容量];
- 数据类型[] 数组名 = new 数据类型[]{值1,值2,值3,…};
- 数据类型[] 数组名 = {值1,值2,值3,…}
2.2 数组的定义1
定义方式1
数据类型[] 数组名 = new 数据类型[容量];
public static void main(String[] args) {
// 数据类型[] 数组名 = new 数据类型[容量];
// 创建int型数组,长度是3
int[] arr1 = new int[3];
// 创建double型数组,长度是4
double[] arr2 = new double[4];
// 创建String数组,长度是3
String[] arr3 = new String[3];
}
2.3 把数组中的数据取出来
数据类型 变量 = 数组名[下标];
- 何为下标? 下标就是索引,其实就是存储数据的一个编号,就好像火车车厢座位的编号
- 下标都是从0开始的,下标最小是0最大是长度-1
整型数组存储的默认值是 0
浮点型数组存储的默认值是0.0
boolean数组存储的默认值是false
char数组存储的默认值是’ ’
引用类型,例如String存储的默认值是null
public class Demo7 {
public static void main(String[] args) {
// 数据类型[] 数组名 = new 数据类型[容量];
// 创建int型数组,长度是3,默认是空的,存储的是0
int[] arr1 = new int[3];
// 从int数组中取出第一个位置的数据
int a1_1 = arr1[0];
int a1_2 = arr1[1];// 取出第二个
int a1_3 = arr1[2];// 取出第三个
// int a1_4 = arr1[3];// 取出第四个,报错,下标越界
System.out.println(a1_1 );// 0
System.out.println(a1_2 );// 0
System.out.println(a1_3 );// 0
// 创建double型数组,长度是4,默认存储的是0.0
double[] arr2 = new double[4];
// 从double数组中取出数据
System.out.println(arr2[0] );// 0.0
System.out.println(arr2[1] );// 0.0
System.out.println(arr2[2] );// 0.0
System.out.println(arr2[3] );// 0.0
// 创建String数组,长度是3,默认存储null
String[] arr3 = new String[3];
// 从String数组取出数据
System.out.println(arr3[0] );// null
System.out.println(arr3[1] );// null
System.out.println(arr3[2] );// null
}
}
2.4 向数组中存储数据
数组名[下标] = 值;
- 注意下标不要越界
- 注意存储的值数据类型不要错
public static void main(String[] args) {
int[] arr1 = new int[3];// 长度3,默认值[0,0,0]
// 先取值查看
System.out.println(arr1[0] );
System.out.println(arr1[1] );
System.out.println(arr1[2] );
// 向数组存储数据
arr1[0] = 10;
arr1[1] = 20;
arr1[2] = 30;
// 再取出来看看
System.out.println(arr1[0] );
System.out.println(arr1[1] );
System.out.println(arr1[2] );
}
单词
method 方法
count 计数
required 要求
provided 提供
convert 转换
result 结果