_note_06

1.说一说函数的按地址传递和按值传递,他们的区别是什么?


函数的参数传递方式可以分为按地址传递(也称为按引用传递)和按值传递两种方式。

按值传递是指将实际参数的值复制给形式参数,即在函数调用时,实际参数的值被复制到函数的形式参数中。在函数内部对形式参数的修改不会影响到实际参数的值。

按地址传递是指将实际参数的地址(指针)传递给形式参数,即在函数调用时,实际参数的地址被传递给函数的形式参数。在函数内部对形式参数的修改会影响到实际参数的值。

区别如下:
1. 按值传递是将实际参数的值复制给形式参数,而按地址传递是将实际参数的地址传递给形式参数。
2. 按值传递不会改变实际参数的值,而按地址传递会改变实际参数的值。
3. 按值传递适用于基本数据类型,如int、float等,而按地址传递适用于引用类型,如数组、对象等。
4. 按值传递在函数调用时会产生额外的内存开销,因为需要复制实际参数的值,而按地址传递则不需要复制实际参数的值,只需要传递地址。

需要注意的是,在Java中,所有的参数传递都是按值传递,即无论是基本数据类型还是引用类型,都是将实际参数的值复制给形式参数。但对于引用类型,复制的是对象的引用(地址),因此在函数内部可以修改对象的属性,但不能修改对象的引用。

2.如何获取数组中元素的个数



int[] array = {1, 2, 3, 4, 5};
int length = array.length;
System.out.println("数组中元素的个数为:" + length);


3.从内存的角度说一说什么是数组?


从内存的角度来说,数组是一段连续的内存空间,用于存储相同类型的多个元素。数组中的每个元素占据相同大小的内存空间,并按照顺序排列。

在内存中,数组的元素可以通过索引来访问。索引是一个整数值,用于表示数组中元素的位置。数组的第一个元素的索引通常为0,第二个元素的索引为1,以此类推。

当创建一个数组时,内存会分配足够的连续空间来存储数组的元素。数组的大小在创建时固定,无法动态改变。每个元素占据的内存空间取决于数组元素的类型,例如,一个int类型的数组中的每个元素通常占据4个字节的内存空间。

通过索引,我们可以直接访问数组中的元素,而不需要遍历整个数组。这是因为数组的内存空间是连续的,通过索引可以计算出元素的内存地址,从而快速访问到指定位置的元素。

需要注意的是,数组的大小在创建时就确定了,无法动态增加或减少。

4.从数据类型的角度说一说什么是数组?


从数据类型的角度来说,数组是一种数据结构,用于存储相同类型的多个元素。它是一个固定大小的、连续的内存区域,用于存储一系列的元素。

数组的元素可以是任意数据类型,包括基本数据类型和引用数据类型。在创建数组时,需要指定数组的类型和大小。数组的大小在创建时确定,并且无法动态改变。

通过索引,可以访问数组中的元素。索引是一个整数值,用于表示数组中元素的位置。数组的第一个元素的索引通常为0,第二个元素的索引为1,以此类推。

数组的好处是可以通过索引快速访问和修改元素,因为数组的内存空间是连续的。此外,数组还可以进行一些基本的操作,如添加、删除、排序等。

总结起来,从数据类型的角度来说,数组是一种用于存储相同类型元素的固定大小、连续的数据结构。它通过索引来访问和操作元素,提供了快速的数据访问和处理能力。

5.说说你目前知道的异常有?什么情况下会产生这些异常?


在Java中,有许多异常类型,每个异常类型都代表了不同的错误或异常情况。以下是一些常见的异常类型和它们可能发生的情况:

1. NullPointerException(空指针异常):当尝试访问一个空对象的属性或调用一个空对象的方法时,会抛出该异常。

2. ArrayIndexOutOfBoundsException(数组下标越界异常):当尝试访问数组中不存在的索引位置时,会抛出该异常。

3. ClassCastException(类转换异常):当试图将一个对象强制转换为不兼容的类类型时,会抛出该异常。

4. ArithmeticException(算术异常):当进行非法的算术运算,如除以零时,会抛出该异常。

5. FileNotFoundException(文件未找到异常):当试图打开或读取一个不存在的文件时,会抛出该异常。

6. IOException(输入输出异常):当发生输入或输出操作失败时,会抛出该异常,如读写文件、网络通信等。

7. IllegalArgumentException(非法参数异常):当传递给方法的参数不符合方法的预期要求时,会抛出该异常。

8. InterruptedException(中断异常):当一个线程在等待、休眠或阻塞状态时,被其他线程中断时,会抛出该异常。

9. NumberFormatException(字符串解析异常) : 在Java中,如果需要将字符串转换为整数、浮点数等基本数据类型,可以使用相应的包装类提供的静态方法进行转换。如果字符串无法解析为相应的数据类型,这些方法会抛出NumberFormatException异常。

这些异常是Java中常见的一些异常类型,它们代表了不同的错误或异常情况。在编写代码时,应该注意捕获和处理这些异常,以保证程序的稳定性和健壮性。

6.思考:不定义第三个变量的情况下,如何交换两个变量的值?

package _09182023.homework_06;

/**
 *
 * 不定义第三个变量的情况下,如何交换两个变量的值
 *
 */
public class _6 {

    public static void main(String[] args) {
        int a = 5;
        int b = 10;

        System.out.println("交换前:");
        System.out.println("a = " + a);
        System.out.println("b = " + b);

        a = a + b;
        b = a - b;
        a = a - b;

        System.out.println("交换后:");
        System.out.println("a = " + a);
        System.out.println("b = " + b);
    }

}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

7.编程:封装一个函数,任意输入一个数判断这个数是否是质数,如果是则返回true,不是在返回false

package _09182023.homework_06;

/**
 *
 * 封装一个函数,任意输入一个数判断这个数是否是质数,如果是则返回true,不是在返回false
 *
 */
public class _7 {

    public static void main(String[] args) {
        int num = 17;
        boolean isPrime = isPrimeNumber(num);

        System.out.println(num + " 是质数吗? " + isPrime);
    }

    public static boolean isPrimeNumber(int num) {
        if (num <= 1) {
            return false;
        }

        for (int i = 2; i <= Math.sqrt(num); i++) {
            if (num % i == 0) {
                return false;
            }
        }

        return true;
    }

}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

8.编程:封装一个函数,对于区间[1,100],输出这个区间内所有的质数

package _09182023.homework_06;

/**
 *
 * 封装一个函数,对于区间[1,100],输出这个区间内所有的质数
 *
 */
public class _8 {

    public static void main(String[] args) {
        System.out.println("区间[1,100]内的质数有:");
        printPrimeNumbers(1, 100);
    }

    public static void printPrimeNumbers(int start, int end) {
        for (int num = start; num <= end; num++) {
            if (isPrimeNumber(num)) {
                System.out.print(num + " ");
            }
        }
    }

    public static boolean isPrimeNumber(int num) {
        if (num <= 1) {
            return false;
        }

        for (int i = 2; i <= Math.sqrt(num); i++) {
            if (num % i == 0) {
                return false;
            }
        }

        return true;
    }

}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

9.编程:封装一个函数,对于任意数组,将数组中的所有质数拼接成字符串形式[a,b,c]返回

package _09182023.homework_06;

/**
 *
 * 封装一个函数,对于任意数组,将数组中的所有质数拼接成字符串形式[a,b,c]返回
 *
 */
public class _9 {

    public static void main(String[] args) {
        int[] nums = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        String primeNumbers = getPrimeNumbers(nums);

        System.out.println("数组中的质数为:" + primeNumbers);
    }

    public static String getPrimeNumbers(int[] nums) {
        StringBuilder sb = new StringBuilder();

        for (int num : nums) {
            if (isPrimeNumber(num)) {
                sb.append(num).append(",");
            }
        }

        if (sb.length() > 0) {
            sb.deleteCharAt(sb.length() - 1);
        }

        return "[" + sb.toString() + "]";
    }

    public static boolean isPrimeNumber(int num) {
        if (num <= 1) {
            return false;
        }

        for (int i = 2; i <= Math.sqrt(num); i++) {
            if (num % i == 0) {
                return false;
            }
        }

        return true;
    }

}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

10.分析并编程:自己准备数组画图分析冒泡排序算法的过程,并写出冒泡排序算法

冒泡排序

冒泡排序算法是一种简单的排序算法,它的基本思想是将相邻的元素两两比较,如果前面的元素大于后面的元素,则交换它们的位置。通过一轮比较和交换,可以将最大的元素移动到数组的末尾。然后再对剩下的元素进行同样的操作,直到整个数组排序完成。

下面是一个数组的冒泡排序过程的图示:

原始数组:[5, 3, 8, 6, 4]

第一轮排序:比较5和3,交换位置,比较5和8,不交换位置,比较8和6,交换位置,比较8和4,交换位置。此时数组变为:[3, 5, 6, 4, 8]

第二轮排序:比较3和5,不交换位置,比较5和6,不交换位置,比较6和4,交换位置。此时数组变为:[3, 5, 4, 6, 8]

第三轮排序:比较3和5,不交换位置,比较5和4,交换位置。此时数组变为:[3, 4, 5, 6, 8]

第四轮排序:比较3和4,不交换位置。此时数组已经排好序,排序完成。

通过上面的图示可以看出,在每一轮排序中,都会将当前未排序部分中最大的元素移动到末尾。因此,需要进行n-1轮排序,才能将整个数组排序完成。冒泡排序算法的时间复杂度为O(n^2),其中n为数组的长度。

package _09182023.homework_06;

/**
 *
 * 冒泡排序
 *
 */

import java.util.Scanner;

public class _10 {

    public static void main(String[] args) {

        int[] target = { 5, 3, 8, 6, 4 };
        System.out.println( "原始数组为: " );
        for ( int v: target ) {

            System.out.print( v + "\t" );

        }

        bubbleSort( target );

    }

    /**
     *
     * 冒泡排序
     * @param arr
     */
    public static void bubbleSort(int[] arr) {
        int n = arr.length;

        // 需要进行n-1轮排序
        for (int i = 0; i < n-1; i++) {
            // 每一轮排序将最大的元素放到末尾
            for (int j = 0; j < n-i-1; j++) {
                if (arr[j] > arr[j+1]) {
                    // 交换位置
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }

        System.out.println( "\n" + "数组排序: " );
        for ( int v: arr ) {

            System.out.print( v + "\t" );

        }

    }

}

11.分析并编程:自己准备数组画图分析选择排序算法的过程,并写出选择排序算法

选择排序

选择排序算法是一种简单的排序算法,它的基本思想是每次从未排序部分选择最小(或最大)的元素,并将其放到已排序部分的末尾。通过不断选择最小(或最大)的元素,将数组逐步排好序。

下面是一个数组的选择排序过程的图示:

原始数组:[5, 3, 8, 6, 4]

第一轮排序:找到最小的元素3,并将其与第一个元素交换位置。此时数组变为:[3, 5, 8, 6, 4]

第二轮排序:在剩下的未排序部分中找到最小的元素4,并将其与第二个元素交换位置。此时数组变为:[3, 4, 8, 6, 5]

第三轮排序:在剩下的未排序部分中找到最小的元素5,并将其与第三个元素交换位置。此时数组变为:[3, 4, 5, 6, 8]

第四轮排序:在剩下的未排序部分中找到最小的元素6,并将其与第四个元素交换位置。此时数组变为:[3, 4, 5, 6, 8]

经过n-1轮排序,整个数组排序完成。

通过上面的图示可以看出,在每一轮排序中,都会从未排序部分选择最小的元素,并将其放到已排序部分的末尾。因此,需要进行n-1轮排序,才能将整个数组排序完成。选择排序算法的时间复杂度为O(n^2),其中n为数组的长度。

package _09182023.homework_06;

/**
 *
 * 选择排序
 *
 */
public class _11 {

    public static void main(String[] args) {
        int[] arr = {5, 3, 8, 6, 4};
        System.out.println("原始数组: ");
        printArray(arr);

        selectionSort(arr);

        System.out.println("排序后数组: ");
        printArray(arr);
    }

    public static void selectionSort(int[] arr) {
        int n = arr.length;

        for (int i = 0; i < n-1; i++) {
            int minIndex = i;
            for (int j = i+1; j < n; j++) {
                if (arr[j] < arr[minIndex]) {
                    minIndex = j;
                }
            }

            int temp = arr[minIndex];
            arr[minIndex] = arr[i];
            arr[i] = temp;

            System.out.println("第" + (i+1) + "轮排序后数组: ");
            printArray(arr);
        }
    }

    public static void printArray(int[] arr) {
        for (int num : arr) {
            System.out.print(num + " ");
        }
        System.out.println();
    }

}

12.编程:封装一个函数,申明整型数组,存放用户循环输入的数据,首尾倒置输出。

package _09182023.homework_06;

import java.util.Scanner;

/**
 *
 * 封装一个函数,申明整型数组,存放用户循环输入的数据,首尾倒置输出
 *
 */
public class _12 {

    public static void main(String[] args) {
        int[] nums = getUserInput();

        System.out.println("原始数组:");
        printArray(nums);

        reverseArray(nums);

        System.out.println("倒置数组:");
        printArray(nums);
    }

    public static int[] getUserInput() {
        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入数组的长度:");
        int length = scanner.nextInt();

        int[] nums = new int[length];

        System.out.println("请输入数组的元素:");
        for (int i = 0; i < length; i++) {
            nums[i] = scanner.nextInt();
        }

        return nums;
    }

    public static void reverseArray(int[] nums) {
        int start = 0;
        int end = nums.length - 1;

        while (start < end) {
            int temp = nums[start];
            nums[start] = nums[end];
            nums[end] = temp;

            start++;
            end--;
        }
    }

    public static void printArray(int[] nums) {
        for (int num : nums) {
            System.out.print(num + " ");
        }
        System.out.println();
    }
    
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

13.编程:申明浮点型数组,存放有序数据,让用户输入搜索数据,使用二分查询法查询用户输入的数据在索引为几的元素,或无此数据。

package _09182023.homework_06;

import java.util.Scanner;

/**
 *
 * 申明浮点型数组,存放有序数据,让用户输入搜索数据,
 * 使用二分查询法查询用户输入的数据在索引为几的元素,或无此数据。
 *
 */
public class _13 {

    public static void main(String[] args) {
        double[] nums = {1.2, 2.3, 3.4, 4.5, 5.6, 6.7, 7.8, 8.9, 9.0, 10.1};

        System.out.print("请输入要搜索的数据:");
        Scanner scanner = new Scanner(System.in);
        double target = scanner.nextDouble();

        int index = binarySearch(nums, target);
        if (index != -1) {
            System.out.println("数据 " + target + " 在索引 " + index + " 的位置。");
        } else {
            System.out.println("无此数据。");
        }
    }

    public static int binarySearch(double[] nums, double target) {
        int left = 0;
        int right = nums.length - 1;

        while (left <= right) {
            int mid = (left + right) / 2;

            if (nums[mid] == target) {
                return mid;
            } else if (nums[mid] < target) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }

        return -1;
    }

}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/447381.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ps:画笔工具

画笔工具 Brush Tool是 Photoshop 中最常用的工具&#xff0c;可广泛地用于绘画与修饰工作之中。 快捷键&#xff1a;B ◆ ◆ ◆ 常用操作方法与技巧 1、熟练掌握画笔工具的操作对于使用其他工具也非常有益&#xff0c;因为 Photoshop 中许多与笔刷相关的工具有类似的选项和操…

Nestjs与Vue实现多人聊天[简易版]

本项目是一个小demo,帮助各位理清一点开发思路&#xff0c;作为一个小参考&#xff0c;虽然技术栈是nodejs。但是其他语言也是相通的。 准备环境&#xff1a; Nodejs version >18.13.0Vue3Nestjssoket.io 一、初始化 打开一个路径启动cmd窗口&#xff0c;初始化前后端项…

智慧城市的前景:数字孪生技术在智慧城市中的应用前景

目录 一、引言 二、数字孪生技术及其在智慧城市中的应用概述 三、数字孪生技术在智慧城市中的应用前景 1、城市规划与仿真模拟 2、智能交通与出行服务 3、智慧环保与可持续发展 4、智慧公共服务与社会治理 5、智慧能源与绿色建筑 四、数字孪生技术在智慧城市中的挑战与…

CSS 入门指南(二)CSS 常用样式及注册页面案例

CSS 常用样式 颜色属性 常见样式的颜色属性&#xff1a; color&#xff1a;定义文本的颜色border-color&#xff1a;定义边框的颜色background-color&#xff1a;设置背景色 颜色属性值设置方式&#xff1a; 十六进制值 - 如&#xff1a;&#xff03;FF0000一个RGB值 - 如…

冬去春来天气阴晴不定 美食拿捏味蕾安稳换季

俗话说“春打六九头”&#xff0c;3月虽然已经入春&#xff0c;但是天气依然是凉飕飕的 &#xff0c;冬天春天的换季期&#xff0c;因为天气的变化&#xff0c;尤为痛苦。但是来到了换季期&#xff0c;天气也不总是那么稳定&#xff0c;随着气温的起伏&#xff0c;我们的食欲也…

Orange3数据预处理(预处理器组件)

1.组件介绍 Orange3 提供了一系列的数据预处理工具&#xff0c;这些工具可以帮助用户在数据分析之前准备好数据。以下是您请求的预处理组件的详细解释&#xff1a; Discretize Continuous Variables&#xff08;离散化连续变量&#xff09;&#xff1a; 这个组件将连续变量转…

Python调用edge-tts实现在线文字转语音

edge-tts是一个 Python 模块&#xff0c;允许通过Python代码或命令的方式使用 Microsoft Edge 的在线文本转语音服务。 项目源码 GitHub - rany2/edge-tts: Use Microsoft Edges online text-to-speech service from Python WITHOUT needing Microsoft Edge or Windows or an…

力扣hot---岛屿数量

dfs思路&#xff1a; 首先通过两层for循环遍历每一个点&#xff0c;如果这个点为0或者2&#xff08;这个2是什么呢&#xff1f;是在遍历该点以及该点连成的这一片区域中&#xff0c;因为通过深度优先搜索&#xff0c;遍历该点就等于遍历这一片区域&#xff0c;遍历这篇区域中的…

打字通小游戏制作教程:用HTML5和JavaScript提升打字速度

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

strlen和sizeof的应用与区别

sizeof和strlen作为都能求大小的工具两者之间有何不同, strlen: 1. strlrn计算的是什么的大小 strlen计算的是字符串长度的大小&#xff0c;所以strlen在计算字符串长度时会一直顺着字符串的元素一个一个的查找&#xff0c;一直到查询到了/0才会停止 2.strlen属于库函数&am…

C# 用 System.Xml 读 Freeplane.mm文件,生成测试用例.csv文件

Freeplane 是一款基于 Java 的开源软件&#xff0c;继承 Freemind 的思维导图工具软件&#xff0c;它扩展了知识管理功能&#xff0c;在 Freemind 上增加了一些额外的功能&#xff0c;比如数学公式、节点属性面板等。 先写一个测试程序 test_read_Xml.cs 如下 using System;…

基于springboot+vue实现开放实验室管理系统项目【项目源码+论文说明】

基于springbootvue实现企业任务管理追踪系统演示 摘要 信息技术永远是改变生活的第一种创新方式&#xff0c;各种行业的发展更是脱离不了科技化的支持。原本传统的行业正在被科技行业的切入悄悄的发生变化。就拿我们生活当中常见的事情举例而言&#xff0c;在外卖行业还没有发…

Linux/Windows下部署OpenCV环境(Java/SpringBoot/IDEA)

环境 本文基于Linux&#xff08;CentOS 7&#xff09;、SpringBoot部署运行OpenCV 4.5.5&#xff0c;并顺带记录Windows/IDEA下如何调试SpringBoot调用OpenCV项目。 Windows下调试 首先我们编写代码&#xff0c;并在Windows/IDEA下调试通过。 下载Windows版安装包&#xff0…

macbook pro 2018 安装 arch linux 双系统

文章目录 友情提醒关于我的 mac在 mac 上需要提前做的事情复制 wifi 驱动 在 linux 上的操作还原 wifi 驱动连接 wifi 网络磁盘分区制作文件系统挂载分区 使用 archinstall 来安装 arch linux遗留问题 友情提醒 安装 archl linux 的时候&#xff0c;mac 的键盘是没法用的&#…

堆宝塔(Python)

作者 陈越 单位 浙江大学 堆宝塔游戏是让小朋友根据抓到的彩虹圈的直径大小&#xff0c;按照从大到小的顺序堆起宝塔。但彩虹圈不一定是按照直径的大小顺序抓到的。聪明宝宝采取的策略如下&#xff1a; 首先准备两根柱子&#xff0c;一根 A 柱串宝塔&#xff0c;一根 B 柱用于…

在高并发、高性能、高可用 三高项目中如何设计适合实际业务场景的分布式id(一)

分布式ID组件&#xff1a;黄金链路上的关键基石 在现代分布式系统中&#xff0c;分布式ID组件无疑扮演着至关重要的角色。作为整个系统的黄金链路上的关键组件&#xff0c;它的稳定性和可靠性直接关乎到整个系统的正常运作。一旦分布式ID组件出现问题&#xff0c;黄金链路上的…

【armv8 / armv9】: MMU深度学习

文章目录 一、MMU概念介绍二、虚拟地址空间和物理地址空间2.1、(虚拟/物理)地址空间的范围2.2、物理地址空间有效位(范围) 三、Translation regimes四、地址翻译/几级页表&#xff1f;4.1、思考&#xff1a;页表到底有几级&#xff1f;4.2、以4KB granule为例&#xff0c;页表的…

FreeRTOS教程1 基础知识

目录 1、准备材料 2、学习目标 3、前提知识 3.1、FreeRTOS简介 3.2、源码函数命名规律 4、动手创建一个FreeRTOS空工程 4.1、CubeMX相关配置 4.1.1、工程基本配置 4.1.2、时钟树配置 4.1.3、外设参数配置 4.1.4、外设中断配置 4.2、生成代码 4.2.1、配置Project Ma…

AIGC实战——GPT(Generative Pre-trained Transformer)

AIGC实战——GPT 0. 前言1. GPT 简介2. 葡萄酒评论数据集3. 注意力机制3.1 查询、键和值3.2 多头注意力3.3 因果掩码 4. Transformer4.1 Transformer 块4.2 位置编码 5. 训练GPT6. GPT 分析6.1 生成文本6.2 注意力分数 小结系列链接 0. 前言 注意力机制能够用于构建先进的文本…

ubuntu安装使用eigen(vscode)

1、eigen安装 安装命令如下&#xff1a; sudo apt-get update sudo apt-get install libeigen3-dev 默认安装路径为&#xff1a; /usr/include/eigen3 安装版本查询命令&#xff1a; pkg-config --modversion eigen3 2、CMakeLists.txt cmake_minimum_required(VERSION 3.…
最新文章