热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数组练习题——JavaSE

文章目录1.自己实现一个toString2.数组的拷贝3. 求数组中元素的平均值4. 查找数组中指定元素(给定一个数组, 再给定一个元素, 找出该元素在数组中的位置.)4.1顺序查找4.2二分查找4.

文章目录

  • 1.自己实现一个toString
  • 2.数组的拷贝
  • 3. 求数组中元素的平均值
  • 4. 查找数组中指定元素(给定一个数组, 再给定一个元素, 找出该元素在数组中的位置.)
    • 4.1顺序查找
    • 4.2二分查找
    • 4.3使用Arrays.binarySearch
  • 5.数组排序(冒泡排序)
  • 6.数组逆序
1.自己实现一个toString

public static String myToString(int[] array) {
String ret = "[";
for(int i = 0;i < array.length;i++){
ret += array[i];虽然没有问题,但是不建议在循环里面使用string进行拼接,建议使用StringBuffer或者StringBuilder,后续介绍呀
if(i != array.length-1){
ret += ",";
}
}
return ret +="]";
}
public static void main(String[] args) {
int[] array = {1,2,3};
String ret = myToString(array);
System.out.println(ret);
}
2.数组的拷贝

①for循环完成

public static void main(String[] args) {
int[] array1 = {1,2,3,4};
System.out.println("array1:"+Arrays.toString(array1));
int[] array2 = new int[array1.length];
for (int i = 0;i < array1.length;i++){
array2[i] = array1[i];
}
System.out.println("拷贝结束,修改array2[0]的值");
array2[0]=10;
System.out.println("array2:"+Arrays.toString(array2));
}

②Arrays.copyOf(原来的数组,拷贝的长度)
在这里插入图片描述

public static void main(String[] args) {
int[] array1 = {1,2,3,4};
int[] array2 = Arrays.copyOf(array1,array1.length);//也可以指定个数拷贝爱,比如把array.length改成2就是拷贝前两个
System.out.println("array1:"+Arrays.toString(array1));
System.out.println("拷贝结束,修改array2[0]的值");
array2[0]=10;
System.out.println("array2:"+Arrays.toString(array2));
}

③Arrays.copyOfRange():拷贝从from到to下标的拷贝
在这里插入图片描述

public static void main(String[] args) {
int[] array1 = {1,2,3,4};
int[] array2 = Arrays.copyOfRange(array1,1,3);//[from,to)
System.out.println("array1:"+Arrays.toString(array1));//array1:[1, 2, 3, 4]
System.out.println("拷贝结束,修改array2[0]的值");
array2[0]=10;
System.out.println("array2:"+Arrays.toString(array2));//array2:[10, 3]
}

④System.arraycopy()
在这里插入图片描述
native方法是由c\c++实现的,优点是快(无法自己实现)

public static void main(String[] args) {
int[] array1 = {1,2,3,4};
int[] array2 = new int[array1.length];
System.arraycopy(array1,0,array2,0,array1.length);
System.out.println("array1:"+Arrays.toString(array1));
System.out.println("拷贝结束,修改array2[0]的值");
array2[0]=10;
System.out.println("array2:"+Arrays.toString(array2));
}

⑤clone()

public static void main(String[] args) {
int[] array1 = {1,2,3,4};
int[] array2 = array1.clone();
System.out.println("array1:"+Arrays.toString(array1));
System.out.println("拷贝结束,修改array2[0]的值");
array2[0]=10;
System.out.println("array2:"+Arrays.toString(array2));
}

总结:以上代码实现的拷贝均是浅拷贝,但是评判一个拷贝是浅拷贝还是深拷贝是要看代码的,不是看用的哪个具体的方法(没有具体说明的情况下,都是针对对象的拷贝说的)
深拷贝:修改拷贝之后的值不影响之前的值
浅拷贝:修改拷贝之后的值影响之前的值

3. 求数组中元素的平均值

public static double avg(int[] array){
int sum = 0;
for(int i = 0; i<array.length;i++){
sum += array[i];
}
return sum *1.0/array.length;
}
public static void main(String[] args) {
int[] array = {1,2,3,4,5};
System.out.println(avg(array));
}
4. 查找数组中指定元素(给定一个数组, 再给定一个元素, 找出该元素在数组中的位置.)

4.1顺序查找

public static int fundVal(int[] array,int key){
for(int i = 0 ;i<array.length;i++){
if(array[i]==key){
return i;
}
}
return -1;
}
public static void main(String[] args) {
int[] array = {1,2,34,5,6};
int key = 2;
System.out.println(fundVal(array,key));
}

4.2二分查找

public static int binarySearch(int[] array,int key){
int left = 0;
int right = array.length-1;
while(left <= right){
int mid = (left+right)/2;
if(array[mid] == key){
return mid;
}else if(array[mid] < key){
left = mid + 1;
}else{
right = mid - 1;
}
}
return -1;
}
public static void main(String[] args) {
int[] array = {1,2,3,4};
Arrays.sort(array);//数组排序
System.out.println(binarySearch(array,2));
}

4.3使用Arrays.binarySearch

public static void main(String[] args) {
int[] array = {1,2,3,4,5,61,7,8};
Arrays.sort(array);
int index = Arrays.binarySearch(array,7);
System.out.println(index);
}
5.数组排序(冒泡排序)

public static void bubbleSort(int[] array){
//i表示趟数
for(int i = 0; i < array.length - 1;i++){
for (int j = 0; j < array.length - 1 - i; j++) {
if(array[j] > array[j + 1]){
int tmp = array[j];
array[j]=array[j + 1];
array[j + 1] = tmp;
}
}
}
}
public static void main(String[] args) {
int[] array = {1,4,2,5,3,7,6,9,8};
System.out.println("排序前:"+Arrays.toString(array));
bubbleSort(array);
System.out.println("排序后:"+Arrays.toString(array));
}

优化后的代码:

public static void bubbleSort(int[] array){
//i表示趟数
for(int i = 0; i < array.length - 1;i++){
boolean flg = false;
for (int j = 0; j < array.length - 1 - i; j++) {
if(array[j] > array[j + 1]){
int tmp = array[j];
array[j]=array[j + 1];
array[j + 1] = tmp;
flg = true;
}
}
if(flg == false){
break;
}
}
}
public static void main(String[] args) {
int[] array = {1,4,2,5,3,7,6,9,8};
System.out.println("排序前:"+Arrays.toString(array));
bubbleSort(array);
System.out.println("排序后:"+Arrays.toString(array));
}
6.数组逆序

public static void reverse(int[] array){
int left = 0;
int right = array.length-1;
while (left < right){
int tmp = array[left];
array[left] = array[right];
array[right] = tmp;
left++;
right--;
}
}
public static void main(String[] args) {
int[] array = {1,234,6,5};
System.out.println("逆置前"+Arrays.toString(array));
reverse(array);
System.out.println("逆置后"+Arrays.toString(array));
}


版权声明:本文为m0_61963422原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/m0_61963422/article/details/123617032
推荐阅读
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • EPPlus绘制刻度线的方法及示例代码
    本文介绍了使用EPPlus绘制刻度线的方法,并提供了示例代码。通过ExcelPackage类和List对象,可以实现在Excel中绘制刻度线的功能。具体的方法和示例代码在文章中进行了详细的介绍和演示。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • 本文详细介绍了PHP中与URL处理相关的三个函数:http_build_query、parse_str和查询字符串的解析。通过示例和语法说明,讲解了这些函数的使用方法和作用,帮助读者更好地理解和应用。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文详细说明了在JavaScript中解决alert弹出窗口文本换行问题的方法。通过给alert弹出的文本添加换行符,可以实现在弹窗中显示多行文本的效果。同时,提供了相关代码示例和注意事项,帮助读者更好地理解和应用这一解决方法。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 代理模式的详细介绍及应用场景
    代理模式是一种在软件开发中常用的设计模式,通过在客户端和目标对象之间增加一层中间层,让代理对象代替目标对象进行访问,从而简化系统的复杂性。代理模式可以根据不同的使用目的分为远程代理、虚拟代理、Copy-on-Write代理、保护代理、防火墙代理、智能引用代理和Cache代理等几种。本文将详细介绍代理模式的原理和应用场景。 ... [详细]
author-avatar
你死了涐陪葬_793
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有