> 文章列表 > day08_数组

day08_数组

day08_数组

今日内容

零、 复习昨日
一、作业
二、数组

零、 复习昨日

方法/函数是什么?

  • 方法就是完成某个功能的一段代码的集合
  • 例如: 方法是 做饭

方法的作用是什么?

  • 封装的思想
  • 方便维护
  • 方便复用

方法的参数列表是什么意思?

  • 参数:方法执行所需的数据
  • 参数列表: 方法执行可以需要多个数据
  • 例如: 做饭(材料)
    吃饭(饭)
    add(int a,int b)

方法的返回值什么意思?

  • 返回值: 就是方法执行后返回的数据
  • 返回值理解为办事后的反馈
  • int r = add(1,2);

为什么要返回数据?

  • 方法执行后返回的数据,程序还要继续使用

方法的返回值返回给谁?

  • 返回给调用该方法的方法

制作零件的程序:
1 给其原材料,融化,返回熔浆
2 获得熔浆,将其锻造成小块,返回小铁块
3 获得小铁块,钻孔,返回带孔铁块
4 获得带孔铁块,造螺纹,返回螺丝帽

一、作业

package com.qf.homework;import com.sun.xml.internal.bind.v2.model.core.ID;/* --- 天道酬勤 --- @author QiuShiju* @desc*/
public class Homework2 {//写一个函数,计算从1到某个数以内所有能被3或者17整除的数的和。public static void printSum(int n) {int sum = 0;for (int i = 1; i <= n; i++) {if (i % 3 == 0 || i % 17 == 0) {System.out.print(i+" ");sum += i;}}System.out.println("\\r\\n"+sum );}// 写一个方法将一个整数逆序打印// 		int a = 3456;// 		输出:6543public static void printNum(int n) {while(n != 0){int num = n % 10;System.out.print(num );n /= 10;}}//传入两个数字,计算他们的次幂,将结果返回//      例如:(2,3)    2^3 = 2*2*2//           (3,4)    3^4=3*3*3*3// 不考虑其他情况: 例如 负数次幂,小数次幂public static int cimi(int di,int mi) {int ji = 1;for (int i = 1;i <= mi;i++) {ji *= di;}return ji;}public static void main(String[] args) {// printSum(17);//printNum(-3456);// System.out.println(10 % 3 ); // 1// System.out.println(10 % -3 );// 1// System.out.println(-10 % 3 );// -1// System.out.println(-10 % -3 );// -1//System.out.println(cimi(3,3) );}}

二、方法递归调用

    public static int jieche2(int n) {if (n == 1) {return 1;}return n * jieche2(n-1);}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MKW4UUt1-1681085108225)(https://qiushiju-tuchuang.oss-cn-hangzhou.aliyuncs.com/image/%E9%98%B6%E4%B9%981.png)]

总结: 需要掌握的是方法调用的过程,以及返回值返回的过程

另外: 熟悉内存结构

三、return

return作用:

  • 结束方法
  • 结束方法并返回数据
    // 作用2结束方法并返回数据public static int add(int a,int b) {return a+b;// return后的代码不执行// System.out.println("xxxx" );}// 作用1: 结束方法public static void show() {// System.out.println(111 );// return;for (int i = 1; i < 10; i++) {if (i == 5) {//break; // 结束当前循环,for后的代码还能执行return; // 结束当前方法,后面的代码不再执行}}System.out.println("for后" );}

当方法返回值类型不是void,即有返回值类型,即方法执行完需要使用return返回数据,以下代码就不正确

    public static int show2(){if (1 > 0) {return 1;}// 此处报错!!!!!,原因缺失return语句}

只要程序中出现if,for,while等需要判断的语法,无论是否是恒成立,都不行.

语法上认为只要是判断,就有可能不成立!! 不成立,就有可能执行不到return 代码,那么上方的代码就会认为缺失return.


总结: 有返回值的方法要有一个100%能执行到return语句!!!

四、数组

4.1 为什么数组?

现在,存储1个人的年龄, int age = 18;

那么,存储30个人的年龄?int age1 = 18;int age2 = 19;。。。有点麻烦!

那么,有没有一种数据类型可以存储多个数据? --> 数组

4.2 什么是数组?

数组: 一组数据的集合,可以存储存储多个数据.


数组的特点:

  • 数组一旦创建,长度/容量固定
  • 同一个数组,只能存储同一种类型的数据

4.3 如何使用数组?

数组的使用步骤: 1声明数组 2创建数组 3使用数组

4.3.1 声明数组

数据类型[] 数组名;

        // 声明:向jvm内存申请一块空间,//      空间的类型是int[],空间的名字是arr1// 数据类型[] 数组名;int[] arr1;double[] arr2;String[] arr3;// 其他声明方式,不建议使用int arr4[];

4.3.2 创建方式1

数组名 = new 数据类型[长度];

        // 创建数组// 数组名 = new 数据类型[长度];arr1 = new int[3];arr2 = new double[3];arr3 = new String[3];// 同时声明并创建数组int[] arr5 = new int[3];

4.3.3 使用数组

使用数组无非就是两件事

  • 数组元素取值
    • 数据类型 变量名 = 数组名[下标];
    • 下标从0开始,最大到长度-1
  • 数组元素赋值
    • 数组名[下标] = 值;
        // 数组取值// 数据类型 变量名 = 数组名[下标];int a1 = arr5[0];int a2 = arr5[1];int a3 = arr5[2];// int a4 = arr5[3];// 下标从0开始,最大数组长度-1,如果超出就会报错// ArrayIndexOutOfBoundsException(数组下标越界异常)System.out.println(a1 );// 0System.out.println(a2 );// 0System.out.println(a3 );// 0
        // 赋值// 数组名[下标] = 值;arr5[0] = 1;arr5[1] = 2;arr5[2] = 3;int a11 = arr5[0];int a12 = arr5[1];int a13 = arr5[2];System.out.println(a11 );System.out.println(a12 );System.out.println(a13 );
// 总结
int[] arr = new int[3];// 声明创建
int[] arr2 = new int[]{1,2,3,4};
int[] arr3 = {11,22,33};
int a = arr[0];        // 取出数组第一个下标处的值赋值给a=0
arr[0] = 1;            // 给数组的第一个下标处赋值1
int a2 = arr[0];       // 再次取出值赋值给变量,a2就是1

// 练习: 声明创建取值赋值,double数组,int数组,String数组

4.4 数组的内存原理

day08_数组

package com.qf.array;/* --- 天道酬勤 --- @author QiuShiju* @desc 数组的原理*/
public class Demo3 {public static void main(String[] args) {/* ps: 数组中的存储的数据称为元素 声明数组,向内存申请一块空间存储数据* 创建数组,在堆内存中开辟连续空间* 且同时会给数组元素赋初始值* 且会根据长度分配下标* 且该空间在内存有地址值* 最后,将地址值赋值给了数组名*/int[] arr = new int[3];// [I@1540e19d// [ 一维数组,I integer的首字母,@地址值分隔符无意义// 1540e19d 就是数组在内存的值System.out.println(arr );// 取值int a = arr[0];System.out.println(a );// 赋值arr[0] = 1;// 再取值System.out.println(arr[0] );arr[1] = 2;System.out.println(arr[1] );}
}

4.5 练习

package com.qf.array;/* --- 天道酬勤 --- @author QiuShiju* @desc 练习*/
public class Demo4 {public static void main(String[] args) {double[] dArr = new double[3];System.out.println(dArr[0] );// double类型初始值0.0System.out.println(dArr[1] );System.out.println(dArr[2] );dArr[0] = 1.1;dArr[1] = 2.2;dArr[2] = 3.3;System.out.println(dArr[0] );System.out.println(dArr[1] );System.out.println(dArr[2] );String[] sArr = new String[3];System.out.println(sArr[0] );// 引用类型的默认初始值nullSystem.out.println(sArr[1] );System.out.println(sArr[2] );sArr[0] = "a";sArr[1] = "b";sArr[2] = "c";System.out.println(sArr[0] );System.out.println(sArr[1] );System.out.println(sArr[2] );}
}

4.6 创建数组的简化格式-静态创建

五、数组应用

5.1 数组遍历

遍历: 获得数组的每个元素.

    public static void main(String[] args) {int[] arr = {1,2,3,4,5,6,7,8,9,10};// 数组有个属性,叫length,通过这个属性获得数组的长度int length = arr.length;System.out.println(length );for (int i = 0; i < arr.length; i++) {System.out.println(arr[i] );}}

创建数组的简化格式-静态创建

五、数组应用

5.1 数组遍历

遍历: 获得数组的每个元素.

    public static void main(String[] args) {int[] arr = {1,2,3,4,5,6,7,8,9,10};// 数组有个属性,叫length,通过这个属性获得数组的长度int length = arr.length;System.out.println(length );for (int i = 0; i < arr.length; i++) {System.out.println(arr[i] );}}