Java-数组-方法

0807-0812

一、本周回顾

本周,我们主要学习了Java中的数组和方法,并在实际练习中应用了这些知识。以下是我们的进展和总结:

  1. 数组的定义和初始化:学会了如何定义和初始化数组,并且通过索引访问数组中的元素。还学习了使用循环遍历数组,并对数组中的元素进行操作。
  2. 多维数组:学习了Java中的多维数组,特别是二维数组的使用。我了解了如何创建和初始化二维数组,并学会了使用嵌套循环来访问和操作元素。
  3. 方法的定义和调用:学习了如何定义方法,并理解了方法的参数和返回值的作用。并学会了在程序中调用这些方法。
  4. 方法的重载:学习了方法的重载。重载允许我们在方法名相同但参数列表不同的情况下实现多态性。

二、感受

  1. 规划时间:我意识到规划时间对于高效学习很重要。在这一周中,我有计划地安排了每天的学习时间,并设定了明确的学习目标。这让我更加专注于学习,并在有限的时间内取得了可观的进展。
  2. 主动参与和实践:仅仅通过听讲是远远不够的。我发现,主动参与和实践是真正加深理解和掌握知识的关键。在这一周中,我积极参与了讨论和交流,同时也通过练习题来巩固所学的知识。
  3. 错误:犯错是学习的一部分。在这一周中,我可能犯了好多好多错误,但我知道这些错误是我成长和学习的机会。这是我并没有掌握的知识,需要进一步的加强,通过接受错误并从中汲取教训,我能够更好地理解概念和解决问题。
  4. 共享:学习是一个共享的过程。在近几周中,我积极和同学进行讨论和交流,共同解决问题、分享发现和经验。通过和同学交流学习,我发现每个人的思维方式都是不一样的,多和别人交流是可以拓展自己的思维。

保持状态就会进步,或多或少取决于自己

永远不要站在原地等结果

三、学习笔记

数组

一维数组;静态初始化数组;数据类型[ ] 数组名;动态初始化数组;数据类型[ ] 数组名 = new 数据类型[数组长都度]

定义数组时,元素类型不同,默认值不同

数组元素类型默认初始值
byte、short、int,long0
float,double0.0
char‘\u0000’(空字符)
booleanfalse
引用数据类型null
数组执行原理

方法区:字节码文件先加载到这里

栈:方法运行时所进入的内存区域,由于变量在方法中,所以变量也在这一块 区域中

堆:存储new出来的东西,并分配地址。由于数组是new 出来的,所以数组也在 这块区域。

数组使用过程可能出现的问题

数组下标越界:

如果在数组中保存的元素可以自动提升(自动类型转化)为数组自己的类型,那是可以保存的

数组反转:

某个数组有5个数据:10,20,30,40,50,请将这个数组中的数据进行反转。 [10, 20, 30, 40, 50] 反转后 [50, 40, 30, 20, 10]

解法:

1.每次交换,需要有左右两边的两个索引,我们可以用i和j表示 刚开始i=0,j=数组长度-1;

2.每次让i和j索引位置的两个元素互换位置 arr[i]和arr[j]互换位置

3.每次还完位置之后,让i往右移动一位,让j往前移动一位

排序

排序算法 有多种,常用的排序算法有冒泡排序、插入排序、选择排序等…

选择排序:

表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所 以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了 吧。选择排序(Selection-sort)是一种简单直观的排序算法。

它的工作原理:首先在未排序序 列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素 中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素 均排序完毕。 n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。

public static void main(String[] args) {
        //选择排序
        int[] arr = {55,34,2,77,45,4,8,40};
        for (int i = 0; i < arr.length - 1; i++) {
            int current = arr[i];
            int index = i;
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[index] > arr[j]){
                    index = j;
                }
            }
            arr[i] = arr[index];
            arr[index] = current;
        }
        for (int i1 = 0; i1 < arr.length; i1++) {
            System.out.println(arr[i1]);
        }
    }
插入排序:

从第i + 1个数据向前找,认为前面的数据是已经排列好的,若索引大于等于零并且若前面的数大于当前数,把前面数据赋值给当前数据,若不满足索引大于等于零并且若前面的数大于当前数,跳出循环,把当前数据插入

public static void main(String[] args) {
        //插入排序
        int[] arr = {55,34,2,77,45,4,8,40};
        for (int i = 0; i < arr.length -1; i++) {
            int current = arr[i + 1];
            int index = i;
            for(;index >= 0 && current < arr[index];index--){
                   arr[index + 1] = arr[index];
                }
            arr[index + 1 ] = current;
            }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + "\t");
        }
        }
冒泡排序:

每次循环,比较相邻的两个数据,进行交换位置,会找到一个最大或最小的数字,把他放到数组一边

每循环一次,都可以少遍历一个数据

 public static void main(String[] args) {
        //冒泡排序
        int[] arr = {2,3,1,8,3,9,6};
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j + 1] > arr[j]){
                    arr[j] = arr[j + 1] ^ arr[j];
                    arr[j + 1] = arr[j + 1] ^ arr[j];
                    arr[j] = arr[j + 1] ^ arr[j];
                }
            }
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + "\t");
        }
    }
二分查找:

二分查找(Binary Search)算法,也叫折半查找算法。二分查找的思想非常简单,有 点类似分治的思想。二分查找针对的是一个有序的数据集合,每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间 被缩小为 0。

 public static void main(String[] args) {
        int[] arr = {1,2,5,7,9,10};
        int start = arr[0];
        int end = arr.length - 1;
        int mid = (start + end) / 2;
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个数字");
        int key = sc.nextInt();
        while( end >= start){
           if (key == arr[mid]){
               System.out.println(mid);
               break;
           }else if (key < arr[mid]){
               end = mid - 1;
           }else {
               start = mid + 1;
           }
             mid = (start + end) / 2;
        }
        if (end < start){
            System.out.println(-1);
        }

    }
多维数组:

二维数组:数据类型[ ] [ ] 数组名;

初始化:

int[] [] arr = new int[3] [4];
int[] [] arr = {
		{1,2,3},
		{4,5}
}

二维数组的迭代:

for(int i = 0;i < arr.length;i++){
	for(int j; j< arr[i].length;j++){
	System.out.println(a)
}}

方法

方法是一种语法结构,它可以把一段代码封装成一个功能,以便重复调用。

修饰符(Modifier)是一种关键字,用于修饰类、方法、变量等各种程序元 素的声明。Java中常用的修饰符包括以下几种:

  • 访问修饰符:用于控制程序元素的访问权限,包括public、protected、 private和默认(不写任何修饰符)四种。

  • 非访问修饰符:用于控制程序元素的行为,包括static、final、abstract、 synchronized、volatile等。

  • 其他修饰符:包括transient、native、strictfp等

使用方法的好处:

  1. 提高代码的复用性,提高了开发率
  2. 让程序的逻辑更清晰
修饰符 返回值类型 方法名( 形参列表 ){ 
	方法体 
	return 返回值; 
}
方法调用:

方法名(参数);

例题:

将main里的arr的地址赋值给Insert中的arr,若Insert中的arr改变,原数据也会改变

将main里a的值赋给addNum中的a,若addNum中的a改变,原数据a不变

 public static void Insert(int[] arr){ 
        arr[2] = 99;
    }
    public static int addNum(int a){
        a += 10;
        return a;
    }
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        Insert(arr);
        for (int i : arr) {
            System.out.print(i + " "); //1 2 99 4 5 
        }
        System.out.println();
        int a = 20;
        System.out.println(a); //20
        System.out.println(addNum(a)); //30
    }
方法重载:

一个类中,方法的名字相同,方法的参数不同(参数的个数、类型)

方法重载的调用,注意实参与形参一一匹配的规则调用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值