【韩老师零基础30天学会Java 】06章 数组、排序和查找

第六章 数组、排序和查找

1. 数组🚩🚩

数组介绍:
数组可以存放多个同一类型的数据。数组也是一种数据类型,是引用类型。即:数组就是一组数据。

示例:

double [] hens={3,5,1,3,4,2,50,7.8,88.8,1.1,5};
double totalWeight=0;
for(int i=0;i<hens.length;i++){totalWeight+=hens[i];
}
System.out.println("总体重="+totalWeight+"平均体重="+totalWeight/hens.length);	

数组的使用方式1-动态初始化
在这里插入图片描述
示例: 循环输入5个成绩,保存在double数组,并输出。

		Scanner input=new Scanner(System.in);double[] scores=new double[5];for(int i=0;i<scores.length;i++){System.out.println("请输入第"+(i+1)+"个元素");scores[i]=input.nextDouble();}//输出遍历数组for(int i=0;i<5;i++){System.out.println(scores[i]);}

使用方式2-动态初始化
1)先声明数组
语法:数据类型 数组名[];也可以 数据类型[] 数组名;
int a[]; 或者 int[] a;
2)创建数组
语法: 数组名=new 数据类型[大小];
a=new int[10];
在这里插入图片描述

使用方式3-静态初始化
在这里插入图片描述

数组使用注意事项和细节:

  1. 数组是多个相同类型数据的组合,实现对这些数据的统一管理
  2. 数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用。
  3. 数组创建后有默认值,如果没有赋值int 0,short 0, byte 0, long 0, float 0.0,double 0.0, char \u0000 ,boolean false, String null。
  4. 使用数组的步骤 1.声明数组并开辟空间 2. 给数组各个元素赋值 3 .使用数组。
  5. 数组的下标是从0开始的。
  6. 数组下标必须在指定范围内使用,否则报:下标越界异常,比如int int[] arr=new int[5]; 则有效下标为 0-4。
  7. 数组属引用类型,数组型数据是对象(object)。

练习1:
在这里插入图片描述

		char[] chars=new char[26];for(int i=0;i<chars.length;i++){//chars 是 char[]//chars[i]是charchars[i]=(char)('A'+i);//'A'+i 是int}//输出for(int i=0;i<chars.length;i++){System.out.print(chars[i]+" ");}

练习2:
在这里插入图片描述

public class IntDetail{public static void main(String[] args){int[] arr={4,-1,9,10,23};int max=arr[0];int maxIndex=0;for(int i=0;i<arr.length;i++){if(arr[i]>max){max=arr[i];maxIndex=i;}}System.out.println("max="+max+" "+ "下标:"+maxIndex);}
}

练习3:
在这里插入图片描述

数组赋值机制❗❗❗

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

值传递和引用传递的区别❗❗❗在这里插入图片描述

数组拷贝(内容复制),数据空间是独立的 ,修改一个,另一个不受影响。
在这里插入图片描述

  • 代码:
		int[] arr1={4,-1,9,10,10,23,110,-23,56,888,-256};int [] arr2=new int[arr1.length];for(int i=0;i<arr1.length;i++){arr2[i]=arr1[i];}System.out.println("arr1的数组元素:");for(int i=0;i<arr1.length;i++){System.out.println(arr1[i]);}arr2[0]=456;System.out.println("arr2的数组元素:");for(int i=0;i<arr1.length;i++){System.out.println(arr2[i]);}

数组反转

方式一:找规律❗

  1. 把arr[0]元和 arr[5]进行交换{66,22,33,44,55,11}。
  2. 把arr[1]和 arr[4]进行交换{66,55,33,44,22,11}。
  3. 把 arr[2]和 arr[3]进行交换{66,55,44,33,22,11}。
  4. 一共要交换3次= arr.length。
  5. 每次交换时,对应的下标 是 arr[i]和 arr[arr.length-1-i]。
  • 代码:
		//数组反转:方式一int[] arr1={7,4,-1,9,10,23,110};for(int i=0;i<arr1.length/2;i++){int tmp=arr1[i];arr1[i]=arr1[arr1.length-1-i];arr1[arr1.length-1-i]=tmp;}System.out.println("===反转后的数组元素===");for(int i=0;i<arr1.length;i++){System.out.println(arr1[i]);}

方式二:使用逆序赋值

  • 代码:
		//数组反转:方式二int[] arr1={7,4,-1,9,10,23,110};int[] arr2=new int[arr1.length];for(int i=0;i<arr1.length;i++){arr2[i]=arr1[arr1.length-1-i];}System.out.println("===反转后的数组元素===");for(int i=0;i<arr2.length;i++){System.out.println(arr2[i]);}

数组添加
在这里插入图片描述

  • 代码
		//扩容int[] arr={1,2,3,4};int[] arrNew=new int[arr.length+1];for(int i=0;i<arr.length;i++){arrNew[i]=arr[i];}arrNew[arrNew.length-1]=4;arr=arrNew;System.out.println("===arr扩容后的数组元素===");for(int i=0;i<arr.length;i++){System.out.println(arr[i]);}

实现动态扩容
在这里插入图片描述

  • 代码
import java.util.Scanner;public class IntDetail{public static void main(String[] args){Scanner myScanner=new Scanner(System.in);//扩容int[] arr={1,2,3,4};do{int[] arrNew=new int[arr.length+1];for(int i=0;i<arr.length;i++){arrNew[i]=arr[i];}System.out.println("请输入元素:");int num=myScanner.nextInt();arrNew[arrNew.length-1]=num;arr=arrNew;System.out.println("===arr扩容后的元素===");for(int i=0;i<arr.length;i++){System.out.println(arr[i]);}//?问用户是否添加System.out.println("是否继续添加y/n");char key=myScanner.next().charAt(0);if(key=='n')break;}while(true);System.out.println("退出");}
}

练习:
在这里插入图片描述

  • 代码
import java.util.Scanner;public class IntDetail{public static void main(String[] args){Scanner myScanner=new Scanner(System.in);//减少int[] arr={15,21,33,49,8,23,56,81};do{//问用户是否减少if(arr.length==1){System.out.println("不能再减。");break;}else{System.out.println("是否继续减少 y/n");char key=myScanner.next().charAt(0);if(key=='n')break;}int[] arrNew=new int[arr.length-1];for(int i=0;i<arrNew.length;i++){arrNew[i]=arr[i];}arr=arrNew;System.out.println("===arr缩减后的元素===");for(int i=0;i<arr.length;i++){System.out.println(arr[i]);}}while(true);System.out.println("退出");}
}

2. 排序

排序介绍
排序是将一群数据,依指定的顺序进行排列的过程
排序的分类:
1.内部排序:
指将需要处理的所有数据都加载到内部存储器中进行排序。包括(交换式排序法、选择式排序法和插入式排序法);
2.外部排序法:
数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。包括(合并排序法和直接合并排序法)。

冒泡排序

冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。
在这里插入图片描述
总结冒泡排序特点
1.我们一共有5个元素。
2.一共进行了 4轮排序,可以看成是外层循环。
3.每1轮排序可以确定一个数的位置,比如第1轮排序确定最大数,第2轮排序,确定第2大的数位置,依次类推。
4.当进行比较时,如果前面的数大于后面的数,就交换。
5.每轮比较在减少 4->3->2->1。

  • 代码
import java.util.Scanner;public class IntDetail{public static void main(String[] args){//冒泡排序int[] arr={24,69,80,57,13};int len=arr.length;int tmp=0;//4:是轮数=length-1for(int i=0;i<len;i++){for(int j=0;j<len-i;j++){if(arr[j]>arr[j+1]){tmp=arr[j];arr[j]=arr[j+1];arr[j+1]=tmp;}}System.out.println("第"+i+"轮:冒泡排序后的结果:");for(int k=0;k<len;k++){System.out.print(arr[k]+" ");}System.out.print("\n");}	}
}

输出:
在这里插入图片描述

3. 查找

顺序查找

字符串判断相等:
findName.equals(names[i])

import java.util.Scanner;
public class IntDetail{public static void main(String[] args){//顺序查找String[] names={"学术","风格","河南","干扰"};Scanner myScanner=new Scanner(System.in);System.out.println("请输入查找内容:");String findName=myScanner.next();int  index=-1;for(int i=0;i<names.length;i++){if(findName.equals(names[i])){index=i;System.out.println(names[i]);System.out.println("下标为:"+i);break;}}if(index==-1){System.out.print("没找到"+findName);}	}
}

二分查找

4. 多维数组

二维数组
arr.length——行数 = 二维数组的元素个数
arr[0].length——列数

  • 代码
		int[][] arr={{1,2,3,4,5},{0,0,0,0,0},{2,3,7,9,0}};for(int i=0;i<arr.length;i++){for(int j=0;j<arr[0].length;j++){System.out.print(arr[i][j]+" ");}System.out.println();

二维数组使用:动态创建二维数组
形式:
1
2 2
3 3 3
在这里插入图片描述

  • 代码
import java.util.Scanner;public class IntDetail{public static void main(String[] args){int[][] arr= new int[10][];for(int i=0; i < arr.length; i++){arr[i] = new int[i+1];for(int j=0;j<arr[i].length;j++){arr[i][j]=i+1;}}for(int i=0;i<arr.length;i++){for(int j=0;j<arr[i].length;j++){System.out.print(arr[i][j]+" ");}System.out.println();}					}
}

二维数组遍历求和

  • 代码
import java.util.Scanner;public class IntDetail{public static void main(String[] args){int[][] arr= {{4,6},{1,4,5,7},{-2}};int sum=0;for(int i=0;i<arr.length;i++){for(int j=0;j<arr[i].length;j++){sum+=arr[i][j];}}System.out.println("sum="+sum);					}
}

杨辉三角❗在这里插入图片描述

在这里插入图片描述

  • 代码
import java.util.Scanner;public class IntDetail{public static void main(String[] args){int[][] yanghui= new int[10][];for(int i=0;i<yanghui.length;i++){yanghui[i]=new int [i+1];for(int j=0;j<yanghui[i].length;j++){if(j==0||j==yanghui[i].length-1){yanghui[i][j]=1;}else{yanghui[i][j]=yanghui[i-1][j]+yanghui[i-1][j-1];}}}for(int i=0;i<yanghui.length;i++){for(int j=0;j<yanghui[i].length;j++){System.out.print(yanghui[i][j]+" ");}System.out.println();}}
}

输出:
在这里插入图片描述

二维数组使用细节和注意事项:在这里插入图片描述

练习1:
在这里插入图片描述
答案:
b),e)✅

作业1:
在这里插入图片描述
答案:B、D、E❌
正确答案:B、D

作业2:
在这里插入图片描述
答案:blue✅

作业3:
在这里插入图片描述
答案:
1
3
5

正确答案:
1
3
5
7

作业4:
在这里插入图片描述

作业5:
在这里插入图片描述

作业6:
在这里插入图片描述
答案:a,z,韩,c,a,z,韩,c❌
正确答案:
a,a
z,z
韩,韩
c,c

作业7:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Zynq FPGA对雷龙SD NAND的测试

文章目录 SD NAND特征SD卡简介1.2 SD卡块图 SD卡样片Zynq测试平台搭建测试流程SOC搭建软件搭建 测试结果总结 SD NAND特征 SD卡简介 雷龙的SD NAND有很多型号&#xff0c;在测试中使用的是CSNP4GCR01-AMW与CSNP32GCR01-AOW。芯片是基于 NAND FLASH 和 SD控制器实现的SD卡。具…

在Linux上部署(MySQL Redis Elasticsearch等)各类软件

实战章节&#xff1a;在Linux上部署各类软件 前言 为什么学习各类软件在Linux上的部署 在前面&#xff0c;我们学习了许多的Linux命令和高级技巧&#xff0c;这些知识点比较零散&#xff0c;同学们跟随着课程的内容进行练习虽然可以基础掌握这些命令和技巧的使用&#xff0c…

电脑不显示wifi列表怎么办?电脑不显示WiF列表的解决办法

有用户会遇到电脑总是不显示wifi列表的问题&#xff0c;但是不知道要怎么解决。随着无线网络的普及和使用&#xff0c;电脑无法显示WiFi列表的问题有时会让人感到困扰。电脑不显示WiFi列表是很常见的问题&#xff0c;但这并不意味着你无法连接到网络。不用担心&#xff0c;这个…

Android中Activity启动的模式

在 Android 开发中&#xff0c;Activity 的启动模式&#xff08;Launch Mode&#xff09;定义了当启动一个 Activity 时&#xff0c;系统会如何处理它的实例。不同的启动模式可以影响 Activity 在任务栈中的管理方式&#xff0c;对用户的使用体验产生直接影响。下面详细介绍四种…

Xshell 7 偏好设置

1 Xshell7 工具——更改用户数据文件夹 就是此电脑目录下的文档 该目录下的7 Xshell下的 applog ColorScheme Files 配色方案文件目录 HighlightSet Files 突出显示集目录 Logs 日志 QuickButton Files 快速命令集 Scripts 脚本文件 Sessions 会话文件 会话文件目录就…

丹摩征文活动 | 丹摩智算:大数据治理的智慧引擎与实践探索

丹摩DAMODEL&#xff5c;让AI开发更简单&#xff01;算力租赁上丹摩&#xff01; 目录 一、引言 二、大数据治理的挑战与重要性 &#xff08;一&#xff09;数据质量问题 &#xff08;二&#xff09;数据安全威胁 &#xff08;三&#xff09;数据管理复杂性 三、丹摩智算…

企业级容器技术docker之一键生成 Docker Compose

案例: 一键生成 Docker Compose 利用网站将docker 命令自动生成 Docker Compse Composerizehttps://www.composerize.com/ 基于docker-compose编译多服务镜像并启动容器案例 输入docker命令就可以自动转换为 docker-compose的格式

C++《stack与queue》

在之前的章节我们学习了C当中string、vector和list三种容器并且试着模拟实现这三种容器&#xff0c;那么接下来在本篇当中我们将STL当中的stack和queue&#xff0c;并且在学习stack和queue的使用之后和之前一样还会试着模拟实现stck和queue。由于stck和queue的模拟实现较为简单…

【Linux】常用命令(2.6万字汇总)

文章目录 Linux常用命令汇总1. 基础知识1.1. Linux系统命令行的含义1.2. 命令的组成 2. 基础知识2.1. 关闭系统2.2. 关闭重启2.3. 帮助命令&#xff08;help&#xff09;2.4. 命令说明书&#xff08;man&#xff09;2.5. 切换用户&#xff08;su&#xff09;2.6.历史指令 3.目录…

Selenium+Pytest自动化测试框架 ------ 禅道实战

前言 有人问我登录携带登录的测试框架该怎么处理&#xff0c;今天就对框架做一点小升级吧&#xff0c;加入登录的测试功能。 选用的测试网址为我电脑本地搭建的禅道 更改了以下的一些文件,框架为原文章框架主体 conftest.py更改 conftest.py #!/usr/bin/env python3 # -*…

java---认识异常(详解)

还有大家来到权权的博客~欢迎大家对我的博客提出意见哦&#xff0c;有错误会及时改进的~点击进入我的博客主页 目录 一、异常的概念及体系结构1.1 异常的概念1.2 异常的体系结构1.3异常的分类 二、异常的处理2.1防御式编程2.2 异常的抛出2.3 异常的捕获2.3.1异常声明throws2.3.…

鸿蒙多线程开发——并发模型对比(Actor与内存共享)

1、概 述 并发是指在同一时间段内&#xff0c;能够处理多个任务的能力。为了提升应用的响应速度与帧率&#xff0c;以及防止耗时任务对主线程的干扰&#xff0c;HarmonyOS系统提供了异步并发和多线程并发两种处理策略。 异步并发&#xff1a;指异步代码在执行到一定程度后会被…

Axure是什么软件?全方位解读助力设计入门

在产品设计和开发领域&#xff0c;Axure是一款大名鼎鼎且功能强大的软件&#xff0c;它为专业人士和团队提供了卓越的设计支持&#xff0c;帮助他们将创意转化为实际可操作的产品原型。 一、Axure 的基本介绍 Axure是一款专业的原型设计工具&#xff0c;主要用于创建交互式的…

客户手机号收集小程序有什么用

客户手机号收集小程序具有多方面的重要作用&#xff0c;主要体现在以下几个领域&#xff1a; 商业营销与客户关系管理 精准营销&#xff1a;通过收集客户手机号&#xff0c;企业能够依据客户的消费行为、偏好等信息&#xff0c;进行精准的个性化营销。例如&#xff0c;电商企业…

Spring Boot集成SQL Server快速入门Demo

1.什么是SQL Server&#xff1f; SQL Server是由Microsoft开发和推广的以客户/服务器&#xff08;c/s&#xff09;模式访问、使用Transact-SQL语言的关系数据库管理系统&#xff08;DBMS&#xff09;&#xff0c;它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的&…

[CKS] Create/Read/Mount a Secret in K8S

最近准备花一周的时间准备CKS考试&#xff0c;在准备考试中发现有一个题目关于读取、创建以及挂载secret的题目。 ​ 专栏其他文章: [CKS] Create/Read/Mount a Secret in K8S-CSDN博客[CKS] Audit Log Policy-CSDN博客 -[CKS] 利用falco进行容器日志捕捉和安全监控-CSDN博客[C…

深入理解Java虚拟机:你真的了解JVM吗?

Java虚拟机(JVM) 是 Java 技术的核心,它帮助 Java 实现了一次编译,到处运行的梦想。然而,你真的理解 JVM 的工作原理吗?今天,我们就从 JVM 的内部架构、垃圾回收机制、性能调优等角度,深入探讨这个“神秘黑盒”。 1. JVM 的基本架构:探索虚拟机内部 JVM 是运行 Java …

大模型就业收入高吗?大模型入门到精通,收藏这篇就够了

目前&#xff0c;已经可以说人工智能&#xff08;AI&#xff09;是推动社会进步和产业升级的重要力量。 其中&#xff0c;AI大模型作为人工智能领域的核心技术之一&#xff0c;正引领着新一轮的技术革命。 2024年&#xff0c;AI大模型开发工程师无疑成为了IT行业中最炙手可热…

el-table 纵向垂直表头处理

项目中表格展示会遇到需要纵向垂直表头情况&#xff0c;下面&#xff0c;我们基于el-table组件来实现这种表格。 以下是这次需要用到的数据表格&#xff0c;已知左侧违章名称是固定的&#xff0c;而月份是不固定的&#xff0c;在后端返回数据格式已确定的情况下&#xff0c;需…

leetcode day10 动态规划篇 64+139

64 最小路径和 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 m grid.lengthn grid[i].length1 < m, n < 2000 < grid[i][j]…