本文共 6696 字,大约阅读时间需要 22 分钟。
第三周:学习数组
数组概念:
数组是存储同一种数据类型多个元素的集合,也可以看成是一个容器。它既可以存储基本数据类型,也可以存储引用数据类型。
数组的定义格式:
格式1:数组类型 [ ] 数组名;//定义了一个int类型的数组变量a
格式2:数据类型 数组名 [ ]; //定义了一个int类型的变量a数组
//两种格式写法读法不一样,但表达的效果一样,都是定义了一个数组,推荐使用第一种,因为可读性更强。
数组初始化:
Java中的数据必须先初始化,然后才能使用,所谓初始化就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。
1.动态初始化:
初始化时只指定数组长度,数组中的元素值由系统默认给定;
格式: 数据类型 [ ] 数组名 = new 数据类型[数组长度];
数组长度其实就是数组中元素的个数。
举例: int a =new int [3];//定义一个int类型的数组,这个数组中可以存放3个int类型的值;
如何获取元素值呢?这里再次引入数组中一个很重要的特点:就是如何取得数组中的元素呢?
数组为每个元素都分配了编号,从0开始。获取的时候只要数组名配合编号即可。最大编号是长度-1。这个编号专业叫法称:索引。2.静态初始化:
初始化时指定每个数组元素的初始值,数组的长度由系统给定;
格式: 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
举例:int[] arr = new int[]{1,2,3};
定义了一个int类型的数组,这个数组中可以存放3个int类型的值,并且值分别是1,2,3;
简写:int[] arr = {1,2,3};
数组常见异常
1.ArrayIndexOutOfBoundsException:数组角标越界异常(数组索引越界)
出现的原因:访问了数组中不存在的索引值;
解决方案:观察数组中到底有索引值到多少; 数组长度-1(数组名.length-1)
2.NullPointerException:空指针异常 (在实际开发中该异常是最多的)
出现的原因:对象为null,而开发者还要去使用对象,就会出现问题
解决方案:给某个对象进行非空判断,防止程序程序空指针异常
为什么要记住这些小问题呢?
因为写程序不仅仅是把代码写出来,还包括出现问题后要能够及时的把问题解决。而排错也应该是我们的基本功。所以,我们也应该记住一些常见的问题,以及出错原因和解决方案。
将遇见到的异常建立文档,记录出现该异常的原因以及如何解决异常!
实例练习:
遍历数组:
public class ArrayTest { public static void main(String[] args) { int [] arr= {1,2,3,4,5}; //遍历数组 for(int i=0;i<5;i++) { System.out.println(arr[i]); } System.out.println("---------华丽的分割线---------"); //如果数组中元素非常多,难以统计元素个数,可采用数组属性:length int [] arr2= {1,2,3,4,5,6,7,8,9}; for(int i=0;i
获取数组中的最值:
public class ArrayTest { public static void main(String[] args) { int [] arr= {5,4,2,3,1}; //定义参照量,假设max为最大值 int max=arr[0]; //同理最小值 int min=arr[0]; /** * 依次与max比较,大于max时将该元素赋值给max * 以此来获取最值 */ for(int i=0;imax) max=arr[i]; } System.out.println("最大值为:"+max); //最小值获取同理 for(int i=0;i
逆序元素:
public class ArrayTest { public static void main(String[] args) { int [] arr= {5,4,2,3,1}; //遍历逆序输出一次 reverse(arr); printArry(arr); //遍历再逆序,输出原数组 reverse2(arr); printArry(arr); } //定义一个逆序方法,方式1 public static void reverse(int [] arr) { for(int i=0;i
根据键盘录入索引查找对应星期:
public class ArrayTest{ public static void main(String[] args) { //定义一个字符串数组 String[] str = {"星期一","星期二","星期三","星期四","星期五","星期六","星期天"} ; //创建键盘录入对象 Scanner sc = new Scanner(System.in) ; //接收数据 System.out.println("请输入一个数据:(0-6):"); int index = sc.nextInt() ; System.out.println("你要查找的是:"+str[index]); }}
数组元素查找:
public class ArrayTest5 { public static void main(String[] args) { //定义一个数组: int[] arr = {200,250,38,101,300} ; //需求1:查找250这个元素在数组中第一次出现的索引 int index = findIndex(arr, 250) ; System.out.println("250元素在数组中第一次出现的索引是:"+index); // //需求2:查找2500这个元素在数组中第一次出现的索引 int index2 = findIndex(arr, 2500) ; System.out.println("2500元素在数组中第一次出现的索引是:"+index2); int index3 = getIndex(arr, 38) ; System.out.println("index3:"+index3); int index4 = getIndex(arr, 380) ; System.out.println("index4:"+index4); } /** * 定义一个查找数组中元素的方法 * 两个明确 * 1)返回值类型:int * 2)参数类型:int [] arr ,两个参数, 第二个参数:int value */ public static int findIndex(int[] arr,int value) { //遍历arr数组元素 for(int x = 0 ; x < arr.length ; x ++) { //判断:如果查找的元素恰好就是value值,那么直接返回该索引 if(arr[x] == value) { return x ; } } //不但要考虑找到的情况,还要考虑到找不到的情况 //在Java中,数组查找元素,如果找不到,返回-1 ,(找不到) return - 1; } //方式2,假设法 public static int getIndex(int[] arr,int value) { //如果没有找到这个元素,假设找不到 int index = -1 ; //遍历数组 for(int x = 0 ; x < arr.length ; x ++) { //获取到每一个元素,如果找到,修改索引值 if(arr[x] == value) { //修改 index = x ; break ; } } return index ; }}
二维数组
格式
数据类型 [ ] [ ] 数组名 = new 数据类型 [m] [n] ;
m:代表当前二维数组中有多少个一位数组;
n:代表每一个一位数组的长度;
m,n 必须为正整数;
例如:String str [ ] [ ] = new String [3] [4]; //可以看做一个3行4列的数组
另外两种格式
数据类型 [ ] 数组名 [ ] = new 数据类型[m] [n];
数据类型 数组名 [ ] [ ] = new 数据类型 [m] [n];
定义数组
1.数据类型 [ ] [ ] 数组名 = new 数据类型 [m] [n] ;
给定一维数组的个数和每个数组的长度;
2.数据类型 [ ] [ ] 数组名 = new 数据类型[m][ ];
只给定一维数组的个数,每一个一维数组的长度动态给定;
3.数据类型[ ] [ ] 数组名称 = {
{元素1,元素2,元素3},{....},{......}} ; //静态初始化例如:int [ ] [ ] arr = {
{1,2,3},{4,5,6},{7,8}};二维数组的遍历
public class ArrayTest { public static void main(String[] args) { //定义一个二维数组,静态初始化 int [][] arr = { {1,2,3},{4,5,6},{7,8,9}}; //调用方法 printArray(arr); } //写一个遍历方法 public static void printArray(int [][]arr){ for(int x=0;x
数组高级部分
1. 冒泡排序
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名“冒泡排序”。
两两比较,大的往后放,第一次比较完毕,最大值出现在最大索引出
package 冒泡排序;public class BubbleSortDemo { public static void main(String[] args) { // 定义数组 int[] arr = { 12, 15, 14, 13, 16, 11 }; // 调用排序方法 bubbleSort(arr); // 调用遍历方法 printSort(arr); } // 冒泡排序方法 public static void bubbleSort(int[] array) { 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 temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } } } } // 遍历功能 public static void printSort(int[] arr) { System.out.print("["); for (int i = 0; i < arr.length; i++) { if (i == arr.length - 1) { System.out.println(arr[i] + "]"); } else { System.out.print(arr[i] + ","); } } }}
2. 选择排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。
选择排序: 用0索引对应的元素依次后面索引对应的元素进行比较, 1索引..... 小的数据往前方法,就可以得到一个排好序的数组
package 选择排序;public class SelectionSort { public static void main(String[] args) { //定义数组 int[] arr = {21,23,22,25,24,26}; //调用排序方法 selsctionSort(arr); //调用遍历输出 printSort(arr); } //选择排序方法 public static void selsctionSort(int []arr) { for (int i = 0; i < arr.length-1; i++) { for (int j = i+1; j < arr.length; j++) { if(arr[i]>arr[i+1]) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } } // 遍历功能 public static void printSort(int[] arr) { System.out.print("["); for (int i = 0; i < arr.length; i++) { if (i == arr.length - 1) { System.out.println(arr[i] + "]"); } else { System.out.print(arr[i] + ","); } } }}
练习
package ArrayTest;import java.util.Arrays;import java.util.Scanner;/** * 把字符串中的字符进行排序。 * 举例:"dacgebf" * 结果:"abcdefg" * * 分析: * 1)键盘录入一个字符串"dacgebf" * 2)可以将字符串转换成字符数组 * 3)冒泡排序 * 4)最终要字符串类型的数据 * */public class ArrayTest { public static void main(String[] args) { // 创建键盘录入对象 Scanner sc = new Scanner(System.in); // 接收数据 System.out.println("请输入一个字符串"); String line = sc.nextLine(); // 字符串转字符数组 char[] ch = line.toCharArray(); // 调用排序方法 bubbleSort(ch); // 转为字符串类型输出 String str = Arrays.toString(ch); System.out.println(str); } // 冒泡排序 public static void bubbleSort(char[] ch) { for (int i = 0; i < ch.length; i++) { for (int j = 0; j < ch.length - 1 - i; j++) { if (ch[j] > ch[j + 1]) { char temp = ch[j]; ch[j] = ch[j + 1]; ch[j + 1] = temp; } } } }}
转载地址:https://blog.csdn.net/otmqixi/article/details/79886693 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!