【JavaSE成神之路】数组思考题讲解

news/2024/11/16 18:51:14/

 

哈喽,我是兔哥呀,今天就让我们继续这个JavaSE成神之路!

这一节啊,咱们要学习的内容是数组的思考题讲解,也就是上一节我留下的两个小作业。

数组是非常重要的知识点,也是我们后续学习各种数据结构的基础,所以我们要专门抽一节出来,把那两道题目讲一讲。

有好处的。

回顾思考题

1.编写一个方法,接收一个int类型数组,返回数组内所有元素的和。

2.编写一个方法,接收一个String类型的参数,里面设置一个String类型的局部数组变量,要求每次调用该方法时,参数要均匀地分配到数组。(即实现一个简易的hash表,不考虑hash冲突问题)

第一题解法与思路

第一题还是比较简单的,只要我们熟悉了一维数组的声明和创建、以及初始化,还有循环的语法就可以轻松实现啦。

    public int sum(int[] nums){int sum = 0;for (int i = 0; i < nums.length; i++) {sum += nums[i];}return sum;}

这段代码声明了一个名为sum的函数,它接受一个int类型的数组作为参数。然后在其中声明了一个名为sum的变量,初始值为0,然后使用for循环遍历数组,将每个元素的值累加到sum变量中,最后返回sum变量的值。

逻辑看起来是没有什么问题,你要让程序更健壮一些的话,可以再加个非空判断。

    public int sum(int[] nums){if(nums == null){throw new RuntimeException("参数不允许为空!");}int sum = 0;for (int i = 0; i < nums.length; i++) {sum += nums[i];}return sum;}

throw new RuntimeException的意思是抛出一个运行时异常,异常的相关知识我们会在后面的章节学到。

测试:

public static void main(String[] args) {Test test = new Test();int sum = test.sum(new int[]{1, 2, 3, 4});System.out.println(sum);
}

答案是10

因为sum方法是写在Test类里面的,所以要调用方法就先得把class给new出来。

如果你传个null进去,就会报错:

int sum = test.sum(null);

效果:

为什么不能传空呢,大家可以看着代码,思考一下这个问题?

顺便问下,还能优化吗?自然是可以的,比如我们可以用Java8的Stream来做简化:

public int sum(int[] nums){if(nums == null){throw new RuntimeException("参数不允许为空!");}return IntStream.of(nums).sum();
}

具体来说,代码中使用了 Java 8 中的 IntStream 类的 of 方法来将数组转换成一个整型流,然后使用 sum 方法对流中的元素求和,并将结果返回。

第二题解法与思路

开始第二题,编写一个方法,接收一个String类型的参数,里面设置一个String类型的局部数组变量,要求每次调用该方法时,参数要均匀地分配到数组。(即实现一个简易的hash表,不考虑hash冲突问题)

简单来说,就是你给我一个Sring对象,我要根据某种规则均匀地放置到数组中!

比如我有个长度为10的数组,接收一个“Hello”字符串,我们首先要根据Hash算法得出一个数字,也就是HashCode,然后用取模运算得到数组的下标。

代码大概长这样:

public void distributeString(String str) {// 定义一个局部数组变量String[] arr = new String[10];// 计算 str 的哈希值int hash = str.hashCode();// 计算 str 在数组中的下标int index = hash % arr.length;// 将 str 分配到数组的对应位置arr[index] = str;
}

这个方法接收一个 String 类型的参数 str。在方法内部,我们定义了一个局部数组变量 arr,并将其初始化为一个长度为 10 的数组。然后,我们使用字符串的 hashCode 方法计算出字符串的哈希值,并使用模运算计算出该字符串在数组中的下标。最后,我们将字符串分配到数组的对应位置。

这样,每次调用这个方法时,传入的字符串都会均匀地分配到数组中。

注意:这个方法只是一个简单的实现,实际上 hash 冲突是一个很常见的问题,需要使用更加复杂的算法来解决。这里只是为了给出一个基本的思路。

什么是HashCode?

Java的hashCode方法是用来获取对象的散列码的方法。散列码是一个整数,它是通过对象的属性进行计算得到的。

Java中的散列码通常用来支持哈希表(也称为散列表)这种数据结构。哈希表是一种高效的查找和插入数据的方式,它通过使用散列函数将数据映射到表中的桶(也称为桶位置)来实现。

如果两个对象的hashCode相等,那么这两个对象可能相等(但不一定相等)。如果两个对象的hashCode不相等,那么这两个对象一定不相等。

Java中的每个对象都有一个hashCode方法,因此你可以在任何对象上调用这个方法。例如,你可以在字符串上调用hashCode方法来获取字符串的散列码:

String s = "Hello, World!";
int hashCode = s.hashCode();

值得注意的是,hashCode方法的返回值并不唯一,也就是说,不同的对象可能会返回相同的散列码。因此,如果你想要判断两个对象是否相等,你应该使用equals方法,而不是使用hashCode方法。

测试distributeString方法,首先我们把数组放到成员属性中去,不然每次调用数组都被重置了。

String[] arr = {"  ","  ","  ","  ","  ","  ","  ","  ","  ","  "};public void distributeString(String str) {// 计算 str 的哈希值int hash = str.hashCode();// 计算 str 在数组中的下标int index = hash % arr.length;// 将 str 分配到数组的对应位置arr[index] = str;//打印数组System.out.print("[ ");for (int i = 0; i < arr.length; i++) {if(i == arr.length - 1){System.out.print(arr[i]);}elseSystem.out.print(arr[i] + ",");}System.out.println("]");
}public static void main(String[] args) {Test test = new Test();test.distributeString("Hello");test.distributeString("world");test.distributeString("Java");
}

结果:

[ Hello,  ,  ,  ,  ,  ,  ,  ,  ,  ]
[ Hello,  ,world,  ,  ,  ,  ,  ,  ,  ]
[ Hello,  ,world,  ,  ,  ,Java,  ,  ,  ]

好啦,关于这两道思考题的讲解,就到这里啦。


http://www.ppmy.cn/news/7674.html

相关文章

在黑金zynqmp 上用emmc 启动的那些坑

缘由&#xff1a;由于硬件设计可能存在问题&#xff0c;导致sd 开启动失败&#xff0c;高速的时候&#xff0c;在建立VFS 时就会引起kernel 崩溃&#xff0c;官方的板子就正常&#xff0c;自己的板子第一版硬件可以&#xff0c;第二版就不行 思路&#xff1a;从emmc 启动 替代…

实现好看的文件选择按钮

实现好看的文件选择按钮引言思路工程1、建HTML2、CSS描述3、JS动作引言 网页设计中默认的文件路径输入框&#xff0c;即file控件&#xff0c;由于其外观太朴素&#xff0c;也无法很难改变其属性特征&#xff0c;想隐藏路径名称也不行。但是我们可以通过巧妙的方法改成自己想要…

Java八股文 v2.0(上)

一、Java基础 1. Java有哪些基本数据类型&#xff1f; byte、short、int、long、float、double、char、boolean。 2. Java类型转换。 从小类型到大类型&#xff0c;直接转。 从大类型到小类型&#xff0c;需要在强制类型转换的变量前面加上括号&#xff0c;然后在括号里面…

css中动画之transition

css动画&#xff1a;css属性过渡实现动画 css过渡就是平滑改变css属性值&#xff0c;元素样式从原始样式逐渐过渡到另外一个样式。 1.过渡css属性 2.过渡时长 css的过渡使用transition属性来定义&#xff0c;transition属性的基础语法如下&#xff1a; transition: property d…

学习poi导出excel之XSSFWorkbook

1 基本介绍 POI提供了HSSF、XSSF以及SXSSF三种方式操作Excel。 HSSF&#xff1a;Excel97-2003版本&#xff0c;扩展名为.xls。一个sheet最大行数65536&#xff0c;最大列数256。 XSSF&#xff1a;Excel2007版本开始&#xff0c;扩展名为.xlsx。一个sheet最大行数1048576&…

高校课程知识库系统|基于Springboot+vue实现高校课程知识库在线学校平台

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

BigDecimal详解及注意事项

这里写目录标题BigDecimal简介BigDecimal常用方法创建BigDecimal加减乘除大小比较BigDecimal等值比较问题保留小数位数BigDecimal简介 浮点数之间的等值判断&#xff0c;基本数据类型不能用 来比较&#xff0c;包装数据类型不能用 equals 来判断。BigDecimal 可以实现对浮点数…

特征工程资料整理,如何从数据中挖掘特征

特征工程资料整理&#xff0c;如何从数据中挖掘特征一、特征工程是什么二、探索性数据分析EDA参考资料&#xff1a;1. pandas_profiling【推荐】2. Sweetviz3. pandasgui4.D-tale【推荐】结论三、特征处理参考资料&#xff1a;1. 数值特征⭐️⭐️⭐️⭐️⭐️数值特征小结&…