Java---第四章(数组基础,冒泡排序,二分查找,多维数组)

news2024/11/28 21:39:25

Java---第四章

  • 一 数组
    • 基本知识
    • 数组操作
  • 二 数组实操
    • 数组排序
    • 二分查找
    • 二维数组

在这里插入图片描述

一 数组

基本知识

概念:
数组是编程语言中的一种常见的数据结构,能够存储一组相同类型的数据

作用:
存储一组相同类型的数据,方便进行数理统计(求最大值,最小值,平均值以及总和),也可以进行信息的展示

定义:

public class study {
    public static void main(String[] args) {
        //1
        byte[] bytes = new byte[]{1,2,3,4,5};
        //2
        int[] numbers = {1,2,3,4,5};
    }
}

第一种:

  • 只能在定义数组同时赋值时使用

第二种:

  • 可以在定义数组时直接使用,也可以先定义数组,然后再赋值使用

数组中的默认值:

  • 双精度浮点数数组中的默认值为0.0
  • 单精度浮点数数组中的默认值为0.0f
  • boolean类型数组默认元素为false
  • char类型数组中的默认元素为’\u0000’
  • 整型数组的默认值为0

基本要素:
在这里插入图片描述

数组操作

数组的遍历:
将数组中的元素全部查看一遍

数组的长度----->数组.length

public class study {
    public static void main(String[] args) {
        int[] arr1 = {1,2,3,4,5};
        for(int i=0;i<arr1.length;i++){
            System.out.println(arr1[i]);
        }
    }
}

数组修改操作:
案例:
现有数列10,12,17,32,39,50,要求将该数列中所有能够被3整除的元素进行平方,然后再放回该元素所处位置

public class study {
    public static void main(String[] args) {
        int[] arr1 = {10,12,17,32,39,50};
        for(int i=0;i<arr1.length;i++){
            if(arr1[i]%3==0){
                arr1[i] *= arr1[i];
            }
        }
    }
}

数组添加操作
案例:
在某机票代售点有A,B,C,D,E,4个人正在排队购票,B的好朋友F现在也来排队购票,发现B正在排队,于是插队至B的后面,请使用数组的相关知识完成程序设计

public class study {
    public static void main(String[] args) {
        String[] arr = {"A","B","C","D","E"};
        //A B C D E
        //A B F C D E
        String[] new_arr = new String[arr.length+1];
        int co = 2;
        for(int i=0;i<co;i++){
            new_arr[i]=arr[i];
        }
        new_arr[co]="F";
        for(int j=co;j<new_arr.length;j++){
            new_arr[j+1]=arr[j];
        }
        arr = new_arr;
        for(int m=0;m<arr.length;m++){
            System.out.println(arr[m]);
        }
    }
}

数组删除操作
案例1:
在前面的案例中,购票人C因为中途有事离开,排队的人员少了一个,请使用数组的相关知识完成程序设计

public class study {
    public static void main(String[] args) {
        String[] arr = {"A","B","C","D","E"};
        //A B C D E
        //A B D E
        String[] new_arr = new String[arr.length-1];
        for(int i=0;i<2;i++){
            new_arr[i]=arr[i];
        }
        for(int j=3;j<arr.length;j++){
            new_arr[j-1]=arr[j];
        }
        arr = new_arr;
        for(int i=0;i<arr.length;i++){
            System.out.println(arr[i]);
        }
    }
}

数组的拷贝
语法:

System.arraycopy(原数组,拷贝的开始位置,目标数组,存放的开始位置,拷贝的元素个数);

这样我们对于上面那一题里的for循环拷贝,就可以换成该语法操作

        String[] arr = {"A","B","C","D","E"};
        //A B C D E
        //A B D E
        String[] new_arr = new String[arr.length-1];
        for(int i=0;i<2;i++){
            new_arr[i]=arr[i];
        }

for循环换成

        System.arraycopy(arr,0,new_arr,0,2);

数组扩容
语法:

数据类型[] 标识符 = Arrays.copyof(原数组,新数组的长度);

举例:

import java.util.Arrays;
public class study {
    public static void main(String[] args) {
        String[] arr = {"A","B","C","D","E"};
        //A B C D E
        //A B C D E F
        String[] new_arr = Arrays.copyOf(arr,arr.length+1);
    }
}

二 数组实操

数组排序

数组中的元素从小到大,或者从大到小的顺序依次排列。分为升序排列和降序排列

冒泡排序:

  • 每一次遍历数组,都能从数组的元素中获取一个最值(最大值,最小值)
  • 在每一次遍历数组时,比较数组中相邻两个元素的大小,根据排列需求进行交换位置

案例:
将数列10,70,55,80,25,60进行降序排列

public class study {
    public static void main(String[] args) {
        int[] arr = {10,70,55,80,25,60};
        for(int i=0;i<arr.length;i++){
            for(int j=0;j<arr.length-i-1;j++){
                if(arr[j]<arr[j+1]){
                    int temp = arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
        }
        for(int j=0;j<arr.length;j++){
            System.out.println(arr[j]);
        }
    }
}

工具的排序操作:
语法:

        Arrays.sort(数组名);//将数组中的元素进行升序排列
        Arrays.toString(数组名)//将数组中的元素组装成一个字符串

注:

字符能够排序,排序是按照字典的顺序进行排序(abcdefg…)

import java.util.Arrays;

public class study {
    public static void main(String[] args) {
        String[] names = {"zhangsan","zhangsi","lisi","lisan",
        "lisiabc","lisib"};
        Arrays.sort(names);
        System.out.println(Arrays.toString(names));
    }
}

[lisan, lisi, lisiabc, lisib, zhangsan, zhangsi]

二分查找

又称为折半查找,顾名思义,每一次都会从中间分成两个区间,利用中间元素与要查找的元素比较大小,从而确定目标元素所在的区间,依次减少范围,确定该元素

二分查找只适用于已经排好序的数组

案例:
从数列95,93,87,86,79,72,60,53中快速找出元素60所处的位置

public class study {
    public static void main(String[] args) {
        int[] numbers = {95,93,87,86,79,72,60,53};
        int target = 60;
        int start =0;
        int end = numbers.length -1;
        while(start<end){
            int mid = (start+end)/2;
            if(numbers[mid]>target)
            {
                start = mid;
            }else if(numbers[mid]<target){
                end = mid;
            }else{
                System.out.println(mid);
                break;
            }
        }
    }
} 

二维数组

数组从本质上来说只有一维,二维数组是指在一维数组中再放入一个一维数组。三维数组,四维数组依次类推。

在这里插入图片描述
二维数组的定义:

数据类型[][] 数组名 = new 数据类型[数组的长度][数组的长度]

例如:定义一个长度为5的二维数组,每一个空间中只能存放任意长度的double数组
其中 2 也可以不填,不填就意味着可以存放任意长度的…数组

public class study {
    public static void main(String[] args) {
        double[][] as = new double[5][];
        as[0] = new double[]{12,66};
        as[1] = new double[]{17,91};
        as[2] = new double[]{15,84};
        as[3] = new double[]{14,67};
        as[4] = new double[]{19,86};
    }
}

案例1:
从控制台录入5首音乐信息(包括名称,歌手,出版年月),并将其信息存储在数组中

import java.util.Scanner;

public class study {
    public static void main(String[] args) {
        String[][] music_a = new String[5][3];
        Scanner sc = new Scanner(System.in);
        for (int i=0;i<music_a.length;i++){
            System.out.println("请输入名称:");
            String name = sc.next();
            System.out.println("请输入歌手:");
            String singer = sc.next();
            System.out.println("请输入出版年月:");
            String date = sc.next();
            music_a[i] = new String[]{name,singer,date};
        }
    }
}

案例2:
某学校一年级一共有3个班,第一个班10个人,第二个班8个人,第三个班7个人,现要求从控制台录入这3个班学生的成绩和年龄,并计算出每个班的平均成绩和平均年龄。

import java.util.Scanner;

public class study {
    public static void main(String[] args) {
        double[][][] stu_cal = new double[3][][];
        stu_cal[0] = new double[10][2];
        stu_cal[1] = new double[8][2];
        stu_cal[2] = new double[7][2];
        Scanner sc = new Scanner(System.in);
        //录入数据
        for(int i=0;i<stu_cal.length;i++){
            double[][] ne_cal = stu_cal[i];
            for(int j=0;j<stu_cal[i].length;j++){
                System.out.println("请输入年龄:");
                int age = sc.nextInt();
                System.out.println("请输入成绩:");
                double score = sc.nextDouble();
                ne_cal[j] = new double[]{age,score};
            }
        }
        //查看数据,并计算平均值
        for(int i=0;i<stu_cal.length;i++){
            double tolage = 0,tolscore = 0;
            double[][] ne_cal = stu_cal[i];
            for(int j=0;j<ne_cal.length;j++){
                tolage += ne_cal[j][0];
                tolscore += ne_cal[j][1];
            }
            System.out.println("第"+(i+1)+"个班的平均年龄为"+(tolage/ne_cal.length));
            System.out.println("第"+(i+1)+"个班的平均成绩为"+(tolscore/ne_cal.length));

        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot3生命周期监听的使用和源码解析

定义SpringApplicationRunListener来监听springApplication的启动 1.通过实现springApplicationRunListener来实现监听。 2.在 META-INF/spring.factories 中配置 org.springframework.boot.SpringApplicationRunListener自己的Listener。 在默认的springboot配置中就有给我…

视觉SLAM十四讲——ch12实践(建图)

视觉SLAM十四讲——ch12的实践操作及避坑 0.实践前小知识介绍1. 实践操作前的准备工作2. 实践过程2.1 单目稠密重建2.2 RGB-D稠密建图2.3 点云地图2.4 从点云重建网格2.5 八叉树地图 3. 遇到的问题及解决办法3.1 cmake ..时&#xff0c;出现opencv版本问题3.2 make -j8时&#…

使用腾讯云服务器从零搭建个人网站

前期准备工作 1.服务器重装系统 选择ubuntu18的系统镜像 2.开放端口 需要开放80&#xff0c;27017&#xff0c;3000&#xff0c;22端口 80端口用于配置nginx服务27017端口用于连接mongondb数据库3000端口是启动项目的端口22端口用于ssh远程连接服务器&#xff0c;一般默认会…

SpringBoot - @Transactional注解详解

简介 Spring中的Transactional注解&#xff0c;基于动态代理的机制&#xff0c;提供了一种透明的事务管理机制&#xff0c;方便快捷的解决在开发中碰到的问题&#xff0c;Transactional 的事务开启 &#xff0c;或者是基于接口的或者是基于类的代理被创建。Spring为了更好的支…

数据库SQL查询(二)之连接查询

本文介绍SQL查询&#xff0c;如何在海量数据中筛选想要数据&#xff1b; 数据库管理系统选择&#xff1a;关系型数据库mysql 数据库管理工具选择&#xff1a;navicat 本文中查询语句和查询案例参考自&#xff1a;https://edu.csdn.net/course/detail/27673?ops_request_mis…

python django vue httprunner 实现接口自动化平台(最终版)

一、项目介绍&#xff1a; 1.1 项目地址 前端地址&#xff1a; GitHub - 18713341733/test_platform_service: django vue 实现接口自动化平台 后端地址&#xff1a; GitHub - 18713341733/test_platform_front: Django vue实现接口自动化平台 1.2 项目介绍 1.2.1 环境…

在 K8S 中部署一个应用 上

本身在 K8S 中部署一个应用是需要写 yaml 文件的&#xff0c;我们这次简单部署&#xff0c;通过拉取网络上的镜像来部署应用&#xff0c;会用图解的方式来分享一下&#xff0c;过程中都发生了什么 简单部署一个程序 我们可以通过 kubectl run 的方式来简单部署一个应用&#…

Python深度学习027:什么是梯度、梯度消失、梯度爆炸以及如何解决

文章目录 1. 梯度的概念2. 梯度更新中存在的问题2.1 梯度消失2.2 梯度爆炸3. 解决办法3.1 梯度消失3.2 梯度爆炸1. 梯度的概念 在机器学习中,梯度是指一个多元函数在某一点处的变化率以及变化的方向。 对于一个参数化的函数,梯度可以告诉我们在一个特定的点处函数值增加最快…

分布式系统概念和设计——Mach实例研究

分布式系统概念和设计 Mach实例研究 Mach主要抽象概述 任务 一个Mach任务是一个执行环境主要包括一个被保护的地址空间和一个内存管理的权能集合这些权能主要用于访问端口 线程 任务可以包含多个线程在共享内存的多处理器中&#xff0c;属于同一个任务的线程可以在不同的处理…

【案例实战】SpringBoot整合Redis实现缓存分页数据查询

正式观看本文之前&#xff0c;设想一个问题&#xff0c;高并发情况下&#xff0c;首页列表数据怎么做&#xff1f; 类似淘宝首页&#xff0c;这些商品是从数据库中查出来的吗&#xff1f;答案肯定不是&#xff0c;在高并发的情况下&#xff0c;数据库是扛不住的&#xff0c;那么…

Java解析XML文件(DOM4J解析xml文件)

内容重点1&#xff1a;DOM4J创建、解析、修改XML文件 内容重点2&#xff1a;DOM4J模拟解析web.xml配置文件&#xff0c;实现实例化servlet 1、什么是xml Xml(Extensible Markup Language) 一种扩展性标示语言,出现的意义其实与JSON字符串的意义相似,是新一代的数据交换标准…

怎么加密共享文件夹?局域网共享文件夹加密方法

相信很多企业都在使用局域网共享文件夹&#xff0c;它可以很方便地实现各部门之间的沟通协作。但是由于使用人员众多&#xff0c;数据安全非常难以得到保障。那么我们该怎么加密局域网共享文件夹呢&#xff1f; 共享文件夹加密 首先&#xff0c;我们先来了解一下共享文件夹加密…

某农业大学数据结构A-第13周作业

1.拓扑排序 【问题描述】 拓扑排序的流程如下&#xff1a; 1. 在有向图中选一个没有前驱的顶点并且输出之&#xff1b; 2. 从图中删除该顶点和所有以它为尾的弧。 重复上述两步&#xff0c;直至全部顶点均已输出&#xff0c;或者当前图中不存在无前驱的顶点为止。后一种情况则…

渲染模式差异和选择

传统服务端渲染 在过去传统开发中&#xff0c;页面渲染任务是由服务端完成的&#xff0c;服务器负责获取数据&#xff0c;拼装页面&#xff0c;客户端仅负责内容显示&#xff0c;使用这种方式的典型技术有 JSP、PHP、ASP.NET 等等。 客户端渲染 CSR Vue.js、React 这类框架之…

专访蘑菇物联沈国辉:做工业AI时代的推动者

在中国制造迈向高质量发展的进程中&#xff0c;数智化转型会成为破局之道。在这其中&#xff0c;蘑菇物联除了是一个本分的答题者&#xff0c;还是一个善于发现问题的贡献者。 作者|思杭 编辑|皮爷 出品|产业家 从广州造纸厂到广州造船厂&#xff0c;从第一橡胶厂到电池厂&a…

利用R语言通过百度地图API进行批量地理编码

利用R语言通过百度地图API进行批量地理编码 当您有大量的地点名称需要在地图上来呈现时&#xff0c;首先要在在线地图上找到该地址的坐标&#xff0c;通常是指经纬度&#xff0c;如果能够用代码来实现&#xff0c;便少了许多费时费力的体力活儿&#xff0c;以下将详细介绍地理…

数据结构的一些总结---利用Python实现

大家好&#xff0c;我是北山啦&#xff0c;本文简单介绍Python数据结构的相关内容&#xff0c;简单就是很简单的那种 文章目录 查找线性查找 O(n)二分查找(Binary Search) O(logn) 排序排序Low B三人组冒泡排序选择排序插入排序 排序NB三人组快速排序归并排序 数据结构栈和队列…

[Day 3 of 17]Building a document scanner in OpenCV

a computer vision-powered document scanner 计算机视觉驱动的文档扫描仪&#xff0c;三个步骤&#xff1a; 边缘检测edges通过边缘&#xff0c;找到代表待扫描纸张的轮廓contour应用透视转换(a perspective transform)获得文档自上而下的视图 How to Build a Kick-Ass Mob…

录音转文字的方法有哪些?这三个录音转文字的方法有哪些

你是否曾经遇到过这样的场景&#xff1a;在开会或者采访时&#xff0c;需要记录重要信息&#xff0c;但是手写记录或打字速度跟不上对话节奏&#xff0c;甚至难以记录所有细节。此时&#xff0c;录音转文字软件就派上用场了。然而&#xff0c;市场上有太多种选择&#xff0c;到…

【Vue3 生态】Vue Router 路由知识概览

前言 在 Web 前端开发中&#xff0c;路由是非常重要的一环&#xff0c;但是路由到底是什么呢&#xff1f; 从路由的用途上讲 路由是指随着浏览器地址栏的变化&#xff0c;展示给用户不同的页面。 从路由的实现原理上讲 路由是URL到函数的映射。它将 URL 和应用程序的不同部分…