新手入门Java数组排序及二维数组(有练习)

这篇具有很好参考价值的文章主要介绍了新手入门Java数组排序及二维数组(有练习)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第七章 二维数组

课前回顾

1.数组的定义方式都有哪几种

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

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

数据类型[] 数组名 = {数组的元素1,数组的元素2,...数组的元素n};//只能在定义数组时直接赋值的时候使用

数据类型[] 数组名 = new 数据类型[]{数组的元素1,数组的元素2,...数组的元素n};//既能在定义数组时使用,也可以在重新给数组赋值																   //时使用

double[] scores;//存储成绩的数组
scores = new double[]{90,91,92};//给数组重新赋值时使用

2.基本数据类型的数组中默认值分别是什么

byte[] short[] int[] long[] double[] float[] boolean[] char[] String[]

0 0 0 0 0.0 0.0f flase ‘\u0000’ null

3.数组有哪些特征

数组一旦赋值,长度就固定下来了,不可再改变。数组的最大下标是数组的长度-1.数组下标从0开始

4.Arrays类是如何对数组进行扩容的

int[] numbers = {1,2,3,4};
numbers = Arrays.copyof(numbers,numbers.length + 10);//对number数组扩容10个长度
//数据类型[] 标识符 = Arrays.copyof(原数组,新数组的长度);

5.如何将数组中的元素拷贝至另外一个数组

double[] scores = {66.5,80,87.5,90};
double[] target = new double[10];//新建了一个长度为10的双精度浮点数数组,默认元素值为0.0
System.arraycopy(scores,0,target,3,scores.length);
//System.arrayCopy(原数组,拷贝的开始位置,目标数组,存放的开始位置,拷贝的元素个数);

第一节 数组排序

1.什么是数组排序

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

2.冒泡排序

解释说明

每一次遍历数组,都能从数组的元素中获取一个最值(最大值、最小值)。

在每一次遍历数组时,比较数组中相邻两个元素的大小。根据排序需要,交换元素的位置

示例

将数列{10,70,55,80,25,60}进行降序排列

分析

a.第1次遍历:从0开始,到数组的末尾,依次比较相邻两个元素的大小,如果前一个元素比后一个元素小,则交换它们的位置。此时交换完了的序列为:70,55,80,25,60,10(得到了一个最小值10)

b.第2次遍历:从0开始,到数组的长度-1,依次比较相邻两个元素的大小,如果前一个元素比后一个元素小,则交换它们的位置。此时交换完了的序列为:70,80,55,60,25(得到了一个最小值25)

c.第3次遍历:从0开始,到数组的长度-2,依次比较相邻两个元素的大小,如果前一个元素比后一个元素小,则交换它们的位置。此时交换完了的序列为:80,70,60,55(得到了一个最小值55)

d.第4次遍历:从0开始,到数组的长度-3,依次比较相邻两个元素的大小,如果前一个元素比后一个元素小,则交换它们的位置。此时交换完了的序列为:80,70,60(得到了一个最小值60)

e.第5次遍历:从0开始,到数组的长度-4,此时交换完了的序列为:80,70(得到了一个最小值70)

f.第6次遍历:从0开始,到数组的长度-5, 此时交换完了的序列为:80(得到了一个最小值80)

代码实现

/**
 * 将数列{10,70,55,80,25,60}进行降序排列
 *
 */
public class Example1 {

    public static void main(String[] args) {
        int[] numbers = {10,70,55,80,25,60};
        for(int i=0; i<numbers.length; i++){//控制遍历次数
            for(int j=0; j<numbers.length - i -1; j++){
                if(numbers[j] < numbers[j+1]){
                    int temp = numbers[j];
                    numbers[j] = numbers[j+1];
                    numbers[j+1] = temp;
                }
            }
        }
        for(int i=0; i<numbers.length; i++){
            System.out.println(numbers[i]);
        }
    }
}

3.工具类的排序操作

语法

Array.sort(数组名);//将数组中的元素进行升序排列

Array.toString(数组名);//将数组中的元素组装为字符串

示例

import java.util.Arrays;

/**
 * Arrays.sort()和Array.toString()的使用
 *
 */
public class Example2 {

    public static void main(String[] args) {
        //字符能够排序,排序是按照字典的顺序进行排序
        char[] chars = {'c','a','g','p','f'};
        Arrays.sort(chars);//对数组进行升序排列
        System.out.println(Arrays.toString(chars));//结果为[a, c, f, g, p]
        
        int[] numbers = {5,7,3,9,1};
        Arrays.sort(numbers);
        System.out.println(Arrays.toString(numbers));//结果为[1, 3, 5, 7, 9]
    }
}

4.二分查找法

解释说明

二分查找法又称折半查找,顾名思义,每一次都会将数组从中间分为两个区间,利用中间元素与要查找的目标元素比较大小,从而确定目标元素所处的区间。一次往复执行,直到找到目标元素为止。

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

案例

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

分析

a.首先将数组从中间位置一分为二,然后利用中间位置的元素与60进行比较,从而确定60所处的目标区间

新手入门Java数组排序及二维数组(有练习),java,排序算法,算法

b.再将目标区间从中间位置一分为二,然后利用中间位置的元素与60进行比较,从而确定60所处的目标区间

新手入门Java数组排序及二维数组(有练习),java,排序算法,算法

c.再将目标区间从中间位置一分为二,然后利用中间位置的元素与60进行比较,从而确定60所处的目标区间

新手入门Java数组排序及二维数组(有练习),java,排序算法,算法

代码实现

/**
 * 二分查找
 * 从数列{95,93,87,86,79,72,60,53}中快速找出元素60所处的位置
 *
 */
public class Example3 {

    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 middle = (start + end) / 2;
            if(numbers[middle] > target){//说明目标元素在后半区间
                start = middle + 1;//改变区间开始的位置
            } else if(numbers[middle] < target){//说明目标元素在前半区间
                end = middle -1;
            } else {//说明目标元素等于numbers[middle]
                System.out.println("目标元素" + target + "所处位置为" + middle);
                break;
            }
        }
    }
}
 

第二节 二维数组

1.数组的本质

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

新手入门Java数组排序及二维数组(有练习),java,排序算法,算法

2.二维数组的定义

语法

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

示例

/**
 * 二维数组的定义
 * 
 */
public class Example4 {

    public static void main(String[] args) {
        //定义了一个长度为10的二维数组,每一个空间中只能存放长度为3的字符串数组
        String[][] personInfos = new String[10][3];
        //定义了一个长度为5的二维数组,每一个空间中只能存放长度为2的double数组
        double[][] agesAndScores = new double[5][2];
        agesAndScores[0] = new double[]{18,60};
        agesAndScores[1] = new double[]{19,65};
        agesAndScores[2] = new double[]{28,90};
        agesAndScores[3] = new double[]{22,55};
        agesAndScores[4] = new double[]{21,60};
        //定义了一个长度为3的二维数组,每一个空间可以存放任意长度的字符串数组
        String[][] infos = new String[3][];
        infos[0] = new String[]{"刘德华"};
        infos[1] = new String[]{"张学友","很牛逼"};
        infos[2] = new String[]{"张德帅","长得","确实很帅"};
    }
}

案例

从控制台录入5首音乐信息(包括名称、歌手、出版年月),并将这些信息存储在数组中。

代码实现

import java.util.Scanner;

/**
 * 从控制台录入5首音乐信息(包括名称、歌手、出版年月),并将这些信息存储在数组中。
 * 
 */
public class Example5 {

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

3.练习

1.从控制台录入10所高校的信息(包括高校名称、所处位置、创办年月),并将这些信息存储在数组中。

import java.util.Scanner;

/**
 * 1.从控制台录入10所高校的信息(包括高校名称、所处位置、创办年月),并将这些信息存储在数组中。
 *
 */
public class Exercise1 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String schoolInfos[][] = new String[10][3];
        for(int i=0; i<schoolInfos.length; i++){
            System.out.println("请输入高校名称:");
            String name = sc.next();
            System.out.println("请输入所处位置:");
            String address = sc.next();
            System.out.println("请输入创办年月:");
            String data = sc.next();
            schoolInfos[i] = new String[]{name,address,data};
        }
    }
}

2.某学校一年级共有三个班,第一个班10人,第二个班8人,第三个班7人,现要求从控制台录入这3个班学生的成绩和年龄,并计算出每个班的平均成绩和平均年龄文章来源地址https://www.toymoban.com/news/detail-789656.html

import java.util.Scanner;

/**
 * 2.某学校一年级共有三个班,第一个班10人,第二个班8人,第三个班7人,
 * 现要求从控制台录入这3个班学生的成绩和年龄,并计算出每个班的平均成绩和平均年龄
 * 
 */
public class Exercise2 {

    public static void main(String[] args) {
        double[][][] stuInfos = new double[3][][];
        stuInfos[0] = new double[10][2];
        stuInfos[1] = new double[8][2];
        stuInfos[2] = new double[7][2];
        Scanner sc = new Scanner(System.in);
        for(int i=0; i<stuInfos.length; i++){//遍历每个班
            for(int j=0; j<stuInfos[i].length; j++){//遍历一个班里的每个人
                System.out.println("请输入年龄:");
                int age = sc.nextInt();
                System.out.println("请输入成绩:");
                double score =sc.nextDouble();
                stuInfos[i][j] = new double[]{age,score};
            }
        }
        for(int i=0; i<stuInfos.length; i++){//查看每个班
            double totalAge = 0,totalScore = 0;
            for(int j=0; j<stuInfos[i].length; j++){//查看每个班的每个人
                totalAge += stuInfos[i][j][0];
                totalScore += stuInfos[i][j][1];
            }
            System.out.println(i + "班的平均年龄为" + totalAge/stuInfos[i].length);
            System.out.println(i + "班的平均成绩为" + totalScore/stuInfos[i].length);
        }
    }
}
int j=0; j<stuInfos[i].length; j++){//查看每个班的每个人
                totalAge += stuInfos[i][j][0];
                totalScore += stuInfos[i][j][1];
            }
            System.out.println(i + "班的平均年龄为" + totalAge/stuInfos[i].length);
            System.out.println(i + "班的平均成绩为" + totalScore/stuInfos[i].length);
        }
    }
}

到了这里,关于新手入门Java数组排序及二维数组(有练习)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java Scanner 类,超详细整理,适合新手入门

    目录 一、什么是 Java Scanner 类? 二、引用数据类型 1、引用数据类型的定义 三、Scanner 类有哪些常用方法? hasNext()用法 四、next() 与 nextLine() 区别 next(): nextLine(): 五、使用 next 方法 五、使用 nextLine方法 Java Scanner 类是 Java 中一个用于读取用户输入的类,它可以从标准输入、

    2024年02月06日
    浏览(56)
  • Java Character 类,超详细整理,适合新手入门

    目录 一、什么是Java Character 类? 二、Character类有哪些常用的静态方法? 1、将一个字符分别转换为大写字母和小写字母 2、如何判断一个字符是否是数字? 3、如何将一个字符转换为数字? 4、如何将一个字符串转换为字符数组? 5、如何判断一个字符是否是字母? Java中的C

    2024年02月02日
    浏览(63)
  • Java使用Aop实现用户操作日志记录(新手入门)

    导入打印日志,aop,hutool,的依赖,Hutool是一个Java工具包,里面封装了大量的常用工具类,到时候咱们就通过这个工具包中有一个工具类可以用来获取客户端IP地址。 自定义操作类型枚举类 因为基本是增删改查四个方法 自定义用来记录用户操作日志的注解 写一个方法加上我

    2024年02月06日
    浏览(48)
  • Java开发环境配置“JDK”超详细整理,适合新手入门

    目录 一、什么是JDK? 二、Java中JDK8、JDK17该怎么选择? 三、JDK和JRE是什么关系? 四、JDK包含的基本组件 五、JDK下载步骤 JDK 安装 1、双击运行安装包,出现安装程序,点击下一步 2、修改JDK安装目录 3、根据提示安装完成,这就完成jdk安装了,可以直接点关闭了 JDK 环境配置

    2023年04月08日
    浏览(57)
  • Java新手小白入门篇 JDK安装及环境变量配置(超详细)

    学习Java,必备的就是JDK,所以我们必须得下载安装JDK,才能学习Java,下面我们会介绍 JDK是什么,如何安装并配置。 一、JDK简介 1.名词解释 JVM (Java Virtual Machine) Java虚拟机 作用:加载 .class 文件 并 运行 .class 文件 JRE (Java Runtime Environment) Java运行环境 包含 JVM + 运行Java程序所必

    2024年02月04日
    浏览(77)
  • Java对二维数组进行排序

    今天刷题时需要用到二维数组的排序,奈何一下想不起具体的写法了,那就浅浅复习总结一下吧,加深一下自己的印象。 主要可以分为三种写法: 1.运用Comparator的常规写法,例如:         上述代码提到的的o1和o2可以理解为二维数组中的任意两个一维子数组,其中o1[0]与

    2024年02月09日
    浏览(51)
  • GitHub新手用法详解【适合新手入门-建议收藏!!!】

    目录 什么是Github,为什么使用它? 一、GitHub账号的注册与登录 二、 gitbash安装详解 1.git bash的下载与安装 2.git常用命令  3. Git 和 GitHub 的绑定 1. 获取SSH keys  2.绑定ssh密钥 三、通过Git将代码提交到GitHub 1.克隆仓库   2.测试提交代码         GitHub是一个面向开源及私有软件项

    2023年04月24日
    浏览(63)
  • uniapp基础(新手入门)

    前言: 这篇文章主要写的是uniapp的基础知识,可以让大家快速上手uniapp,同时避掉一些可能踩到的坑。 uniapp是由 dcloud 公司开发的多端融合框架。uniapp的出现让我们的开发更为方便,一次开发,多端运行。更重要的是学习成本不会很大,因为uniapp主要是Vue语法加上小程序的

    2024年02月12日
    浏览(47)
  • PyCharm新手入门指南

    安装好Pycharm后,就可以开始编写第一个函数:Hello World啦~我们就先来学习一些基本的操作,主要包含新建Python文件,运行代码,查看结果等等。 文章主要包含五个部分: 一、界面介绍 主要分为菜单栏、项目目录、编辑区域、终端区和运行/调试代码区域。 1、菜单栏:一些新

    2024年02月13日
    浏览(55)
  • HLS新手入门教程

    HLS是一种高级综合技术,它允许开发人员使用高级语言(如C、C++和SystemC)来描述数字电路的行为和功能,然后将其转换为硬件电路实现。这种转换过程是自动完成的,因此开发人员无需手动编写硬件描述语言(HDL)。 HLS的主要目的是简化FPGA设计流程,提高设计效率和设计质

    2024年02月02日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包