JavaSE-05 数组
学习要点
- 数组的基本用法
- 数组的典型应用
数组相关概念
问题
Java考试结束后,老师给小强分配了一项任务,让他计算全班(30人)的平均分,按照目前的知识结构,如何实现?
问题分析
数组
定义:数组是一个变量,存储相同数据类型的一组数据。
声明一个变量就是在内存空间划出一块合适的空间。
声明一个数组就是在内存空间划出一串连续的空间。
数组基本要素
- 标识符:数组的名称,用于区分不同的数组
- 数组元素:向数组中存放的数据
- 元素下标:对数组元素进行编号,从0开始,数组中的每个元素都可以通过下标来访问
- 元素类型:数组元素的数据类型
数组的使用
使用数组4步骤
第一步:声明数组
声明数组: 告诉计算机数据类型是什么
语法分析
第二步:分配空间
分配空间:告诉计算机分配几个连续的空间。
语法分析:声明数组并分配空间(第一步第二步合并书写)
第三步:赋值
向分配的内存单元放数据
逐个赋值比较繁琐,解决方法如下
方法一:边声明边赋值
方法二:动态从键盘输入信息赋值
第四步:处理数据
计算5位学生平均分
综合演示:输入5位同学成绩,计算平均分并输出。
常见错误:声明数组时未制定大小,数组越界问题,创建数组并赋值的方式必须在一条语句中完成。
例如:
int[ ] score = new int[5];
score = {60, 80, 90, 70, 85};
int[ ] score2;
score2 = {60, 80, 90, 70, 85};
上机练习:有一个数列:8,4,2,1,23,344,12。
要求:循环输出数列的值。
求数列中所有数值的和。
猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含此数。
上机练习:定义5个数组,分别存储学生的学号、姓名、性别、年龄、班级。
要求:初始化三个学生信息,按照表格样式输出。
数组的排序
数据工具类和方法的使用
问题:循环录入5位学员成绩,进行升序排列后输出结果。
解决方案:使用java.util.Arrays类
- java.util包提供了许多工具类
- Arrays类提供操作数组的方法,例排序、查询
- Arrays类的sort()方法: 对数组进行升序排列
求数组的最大值
问题:从键盘输入本次Java考试五位学生的成绩,求考试成绩最高分。
问题分析:可以采用if选择结构处理,过程类似打擂台,但是比较繁琐。
解决方案:使用循环解决该问题
数组进阶:插入算法
问题:有一组学员的成绩{99,85,82,63, 60},将它们按升序排列。要增加一个学员的成绩,将它插入成绩序列,并保持升序。
解决方案要点:重新定义个长度为6的数组。
参考代码:
int[] arr1 = { 99, 85, 82, 63, 60 };// 定义数组1 Arrays.sort(arr1);// 对数组1进行排序 System.out.println("arr1排序后数组元素:"); for (int i = 0; i < arr1.length; i++) { System.out.print(arr1[i] + "\t"); } // 数组长度固定,arr1无法插入数据,定义一个长度为arr1长度加1的数组arr2 int[] arr2 = new int[arr1.length + 1]; // 把arr1的数据拷贝到arr2 for (int i = 0; i < arr1.length; i++) { arr2[i] = arr1[i]; } System.out.println("\narr2数组元素:"); for (int i = 0; i < arr2.length; i++) { System.out.print(arr2[i] + "\t"); } int inNum = 88;// 定义待插入数据:88 int index = 0;// 待插入的位置 for (int i = 0; i < arr2.length; i++) { if (arr2[i] > inNum) {//问题:如果inNum原本就比数组元素都大??? index = i; break; } } // 把数组元素下标为index(包含index)之后的元素向后移动一位 for (int i = arr2.length - 1; i > index; i--) { arr2[i] = arr2[i - 1]; } // 插入数据 arr2[index] = inNum; // 输出插入数据后的数组 System.out.println("\narr2插入数据后的数组元素:"); for (int i = 0; i < arr2.length; i++) { System.out.print(arr2[i] + "\t"); }
数组进阶:冒泡排序算法
- 采用二重循环
- N个数字来排序
- 两两相比小靠前
- 外层循环N-1次(i次)
- 内层循环N-1-i次
参考代码:
// 冒泡排序法 int[] arr = { 11, 3, 2, 55, 44, 33 }; System.out.println("冒泡排序前的数组:"); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } // 排序 for (int i = 0; i < arr.length - 1; i++) {// 外层循环N-1次 for (int j = 0; j < arr.length - 1 - i; j++) {// 内层循环N-1-i次 if (arr[j] > arr[j + 1]) {// 两个数字比较,大的排后 int temp; temp = arr[j + 1]; arr[j + 1] = arr[j]; arr[j] = temp; } } } System.out.println("\n冒泡排序后的数组:"); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); }
上机练习:将 一组乱序的字符进行排序,进行升序和逆序输出。
提示步骤:
1.创建数组存储原字符序列。
2.利用Array类的sort( )方法对数组进行排序,并循环输出。
3. 从最后一个元素开始,将数组中的元素逆序输出。
上机练习:在上一个练习的基础上改进
向上一个练习中得到的升序字符序列中插入一个新的字符,要求插入之后字符序列仍保持有序。
JavaSE-05 数组的更多相关文章
- 067 01 Android 零基础入门 01 Java基础语法 08 Java方法 05 数组作为方法参数
067 01 Android 零基础入门 01 Java基础语法 08 Java方法 05 数组作为方法参数 本文知识点:数组作为方法参数 说明:因为时间紧张,本人写博客过程中只是对知识点的关键步骤进 ...
- 05 - JavaSE之数组
一维数组 java中的数组是引用类型,分配在堆空间上. 一维数组的声明方式: type var[]; type[] var; java中声明数组时不能指定其长度,如下,因为java中的数组是分配在堆空 ...
- C语言 05 数组
数组作为函数参数,可以省略元素个数. 数组作为函数参数,传递是整个数组的地址,修改函数形参数组的值,会影响到外面的 实参数组. 基本数据类型作为函数参数,传递是数值.
- Java 基础入门随笔(6) JavaSE版——数组操作
1.数组 概念:同一种类型数据的集合.其实就是数组就是一个容器. 好处:可以自动给数组中的元素从0开始编号,方便操作这些元素. 格式: ①. 元素类型[] 数组名 = new 元素类型[元素个数或数组 ...
- c#学习笔记05——数组&集合
数组 声明数组 .一维数组的定义: 数据类型[] 数组名=new 数据类型[大小]; eg: ]; ,,,,}; ]; .多维数组的定义 ,];//定义二维数组 ,,];//定义三维数组 多维数组可以 ...
- JAVASE(八) 数组: 一维数组、二维数组、动态数组、静态数组
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1.一维数组 1.1 数组的声明和初始化声明方式: String str[]; //不建议使用 Stri ...
- Java基础四(switch、数组、)
1.流程控制语句switch2.数组3.随机点名器案例 ###01switch语句解构 * A:switch语句解构 * a:switch只能针对某个表达式的值作出判断,从而决定程序执行哪一段代码. ...
- 04_Java基础语法_第4天(数组)_讲义
今日内容介绍 1.流程控制语句switch 2.数组 3.随机点名器案例 01switch语句解构 * A:switch语句解构 * a:switch只能针对某个表达式的值作出判断,从而决定程序执行哪 ...
- Java基础笔记01-02-03-04
一.今日内容介绍 1.Java开发环境搭建 2.HelloWorld案例 3.注释.关键字.标识符 4.数据(数据类型.常量) 01java语言概述 * A: java语言概述 * a: Java是s ...
- php基础03:数据类型
<?php // day01:数据类型 //01.字符串 $x = "hello world"; echo $x; echo "<br>"; ...
随机推荐
- 并不对劲的p2664树上游戏
题目大意 有一棵\(n\)(\(n\leq10^5\))个点的树,每个点\(i\)有颜色\(c_i\)(\(c_i\leq10^5\)) 定义一条路径的得分为这条路径上的不同颜色个数 分别求每个点的以 ...
- [Usaco2013 DEC] Vacation Planning
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4093 [算法] 对于k个枢纽 , 分别在正向图和反向图上跑dijkstra最短路 , ...
- bzoj3195 [Jxoi2012]奇怪的道路——状压DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3195 看到数据范围就应该想到状压呢... 题解(原来是这样):https://www.cnb ...
- 设计模式之观察者模式(Observer pattern)
最近参加了一次面试,其中笔试题有一道编程题,在更换掉试题的描述场景后,大意如下: 上课铃声响起,学生A/B/C/D进入教室:下课铃声响起,学生A/B/C/D离开教室. 要求使用设计模式的思想完成铃与学 ...
- ThinkPHP3.2.3学习笔记4---统计ThinkPHP3.2.3加载的文件
将ThinkPHP3.2.3的入口文件index.php加入一个函数getIncludeFiles,文件内容变成如下所示: <?php // +------------------------- ...
- P2210 Haywire(A*)
P2210 Haywire 题目描述 Farmer John有N只奶牛,(4 <= N <= 12,其中N是偶数). 他们建立了一套原生的系统,使得奶牛与他的朋友可以通过由干草保护的线路来 ...
- 又一篇Centos7下的asp.net core部署教程
历程2个多月的学习,我终于从PHP转.Net开发了. 从壹开始前后端分离[ .NETCore2.1 +Vue 2 +AOP+DI]框架 感谢老张的博客,我对asp.net core入门主要就是靠他的博 ...
- 手机端实现6位短信验证码input输入框效果(样式及代码方法)
微信移动端4位.6位.多位验证码密码输入框功能的实现代码,实现思路: 方案1: 写一个简单的input框. 评估:样式不好看,待定. 方案2: 就是用6个input框,每输入一个数字之后,切换到下一个 ...
- PhpStorm Xdebug远程调试环境搭建原理分析及问题排查
2017年05月26日 经验心得 目录 一. 环境介绍 二. 远程环境配置 2.2 Xdebug安装 2.3 配置 三. 本地phpstorm配置 3.1 下载远程代码 3.2 添加php解释器 ...
- 洛谷 P2062 分队问题
这题太毒了....一开始就是死活想不到,结果看了很多遍题解,重新做的时候还是做不出来.. 好像有一点被错误的题解误导了? #include<cstdio> #include<algo ...