ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Java零基础入门:一维数组、二维数组、矩阵转置、数组元素统计

Java零基础入门:一维数组、二维数组、矩阵转置、数组元素统计 Java零基础入门一维数组、二维数组、矩阵转置、数组元素统计数组是具有相同数据类型的一组数据的集合 。例如球类的合集——足球、篮球、羽毛球等电器集合——电视剧、洗衣机、电风扇等。在程序设计中可以将这些集合称为数组。数组中的元素具有相同的数据类型。在Java中同样将数组看作一个对象虽然基本数据类型不是对象但由基本数据类型组成的数组却是对象。在程序设计中引入数组可以更有效的管理和处理数据。可根据数组的维数将数组分为一维数组、二维数组……一维数组1一维数组的定义与语法一维数组实质上是一组相同类型数据的线性集合当在程序中需要处理一组数据或者传递一组数据时可以应用这种类型的数据。例如int[ ] nums{1,2,3,4,5……}声明一维数组有下列两种方式数组元素类型 数组名字[ ]数组元素类型[ ] 数组名字数组元素类型决定了数组的数据类型它可以是Java 中任意的数据类型包括简单类型和组合类型。数组名字为一个合法的标识符符号“ [ ] ”指明该变量是一个数组类型变量。单个“ [ ] ”表示要创建的数组是一维数组。声明一维数组代码如下int arr[]; //声明int型数组数组中每个元素都是int型数值声明数组后还不能立即访问它的任何元素因为声明数组只是给出了数组名字和元素的数据类型要想真正使用数组还要为它分配内存空间。在为数组分配内存空间时必须指明数组的长度。为数组分配内存空间的语法格式如下数组名字 new 数组元素的类型[数组元素的个数]数组名字被连接到数组变量的名称。数组元素的个数指定数组中变量的个数即数组的长度。通过上面的语法可知使用new关键字为数组分配内存时必须指定数组元素的类型和数组元素的个数即数组的长度。例如arr new int[5];以上代码表示创建一个含有5个元素的整型数组并且将创建的数组对象赋给引用变量arr即通过引用变量arr来引用这个数组使用new关键字为数组分配内存时整型数组中各个元素的初始值都为0。声明的同时为数组分配内存这种创建数组的方式是将数组的声明和内存的分配合在一起执行。语法如下数组元素的类型 数组名 new数组元素的类型[数组元素的个数]声明并为数组分配内存代码如下int month[ ] new int[12]2初始化一维数组数组与基本数据类型一样可以进行初始化操作。数组的初始化可分别初始化数组中的每个元素。数组的初始化有以下两种方式int arr[] new int[]{1,2,3,5,25};int arr2[] {34,23,12,6};从中可以看出数组的初始化就是包括在大括号之内用逗号分开的表达式列表。用逗号,分隔数组中的各个元素系统自动为数组分配一定的空间。用第一张初始化方式将创建5个元素的数组其元素依此为1、2、3、5、25。第二种初始化方式会创建4个元素的数组其元素依此为34、23、12、6。3一维数组的应用示例一使用一堆数组输出1-12月每个月份的天数Public class Month{Public static void main(String[ ] args){Int day[ ]new int[ ]{31,28,31,30,31,30,31,31,30,31,30,31}For(int i0,i12;i){System.out.println((i1)月有day[i]天);} } }2.二维数组如果一维数组中的各个元素仍然是一个数组那么它就是一个二维数组。二维数组常用于表示表表中的信息以行和列的形式组织第一个下标代表元素所在的行第二个下标代表元素所在的列, 多行多列数据类似教室座位表.2.1二维数组的创建二维数组可以看作是特殊的一维数组创建有两种方式先声明再用new关键字进行内存分配声明二维数组的语法如下数组元素的类型 数组名字[ ][ ];数组元素的类型[ ][ ] 数组名字声明二维数组代码如下int a[ ][ ];同一维数组一样二维数组在声明时也没有分配内存空间同样要使用new关键字来分配内存然后才可以访问每个元素。对于高维数组有两种为数组分配内存的方式。第一种内存分配方式是直接为每一维分配内存空间代码如下a new int[2][4]上述代码创建了二维数组a二维数组a中包括两个长度为4的一维数组。第二种内存分配方式是分别为每一维分配内存代码如下anew int[2][];a[0] new int[2];a[1]new int [3];上述代码创建了二维数组a但是只声明a第一维的长度也就是“行数”第二维的长度也就是“列数”则是为每一行单独声明的因此创建的数组a是“不定长数组”。声明的同时为数组分配内存第二种创建方式与第一种实现的功能相同只不过声明和赋值合并到同一行代码中。例如创建一个2行4列的二维数组代码如下int a new int[2][4]2.2初始化二维数组二维数组的初始化与一维数组初始化类似同样可以使用大括号完成。语法如下type arrayname[ ][ ] {value1,value2,…valuen}type数组数据类型arrayname数组名称一个合法的标识符value二维数组中各个元素都代表一个一维数组。初始化二维数组代码如下int myarr[ ][ ]{{12,0},{45,10}};初始化二维数组后要明确数组的下标都是0开始。例如上面的代码中myarr[1][1]的值为10。int型二维数组是以int a[ ][ ]来定义的所以可以直接给a[x][y]赋值。例如给a[1]的第二个元素赋值的语句如下a[1][1]202.3二维数组的应用示例一输出一个3行4列且所有元素都为0的矩形public class Matrix {//创建类public static void main(String[] args) {//主方法int a[][]new int[3][4];//定义二维数组for(int i 0;ia.length;i) {for(int j 0;ja[i].length;j) {//循环遍历数组中的每个元素System.out.print(a[i][j]);//将数组中的元素输出}System.out.println();//输出空格} } }3.矩阵转置在 Java 中矩阵转置是一个常见操作主要是将矩阵的行和列互换。以下是实现矩阵转置的步骤和代码示例。实现步骤创建新矩阵 新矩阵的行数等于原矩阵的列数列数等于原矩阵的行数。遍历原矩阵 使用嵌套循环遍历原矩阵的每个元素。赋值到新矩阵 将原矩阵中位置 (i, j) 的元素赋值到新矩阵中的位置 (j, i)。代码示例以下是一个简单的 Java 实现public class MatrixTranspose {public static void main(String[] args) {int[ ][ ] original {{1, 3, 4},{2, 4, 3},{3, 4, 5} } // 定义一个 3x3 的原始矩阵System.out.println(原始矩阵);// 输出原始矩阵for (int i 0; i original.length; i) {for (int j 0; j original[i].length; j) {System.out.print(original[i][j] );}System.out.println();}int[ ][ ] transpose new int[original[0].length][original.length]; // 创建转置后的矩阵for (int i 0; i original.length; i) {for (int j 0; j original[i].length; j) {transpose[j][i] original[i][j];} }System.out.println(转置后的矩阵);// 输出转置后的矩阵for (int i 0; i transpose.length; i) {for (int j 0; j transpose[i].length; j) {System.out.print(transpose[i][j] );}System.out.println();} } }4.数组元素统计在Java中可以通过多种方法统计数组中有多少种不同的元素。以下是两种常用方法的实现方法一使用HashSet步骤创建一个HashSet对象。遍历数组将每个元素添加到HashSet中。由于HashSet会自动去重最终集合的大小即为数组中不同元素的数量。代码示例import java.util.HashSet;// HashSet 是 Java 集合框架中的一种集合Set它有一个核心特性不允许存储重复元素。public class UniqueElements {public static void main(String[] args) {int[ ] array {1, 2, 3, 4, 2, 3, 5};HashSetInteger uniqueElements new HashSet();//创建一个 HashSet 对象用来存放整数。Integer 是泛型表示这个集合只能装 Integer 类型的对象注意int 会自动装箱成 Integerfor (int num : array) {// 依次从 array 中取出每个元素赋值给变量 numuniqueElements.add(num);}// 尝试把 num 加入集合System.out.println(不同元素的数量: uniqueElements.size());} }方法二使用Stream API步骤将数组转换为流Stream。使用distinct()方法去重。调用count()方法获取不同元素的数量。代码示例import java.util.Arrays;// 导入 Arrays 工具类它提供了很多操作数组的静态方法其中 stream() 可以把数组变成流。public class UniqueElementsStream {public static void main(String[] args) {int[ ] array {1, 2, 3, 4, 2, 3, 5};long count Arrays.stream(array).distinct()//对流中的元素进行去重。.count();//统计流中还有多少个元素。System.out.println(不同元素的数量: count);} }相比来说HashSet更加的适合初学者StreamApi需要理解stream的概念以及distinct和count的含义5.常见数组使用的基本操作示例一呈梯形输出二维数组中的元素在项目中创建Trap类在主方法中编写代码定义二维数组将二维数组中的元素呈梯形输出。public final class Trap {//创建类public static void main(String[] args) {//主方法int b[][]new int[][] {{1},{2,3},{4,5,6}};//定义二维数组for(int k0;kb.length;k) {for(int c0;cb[k].length;c) {//循环遍历二维数组中的每个元素System.out.print(b[k][c]);//将数组中的元素输出}System.out.println();//输出空格} } }示例二填充替换数组元素数组中的元素定义完成后可通过Arrays类的静态方法fill( )来对数组中的元素进行替换。改方法通过各种重载形式可完成对任意类型的数组元素的替换。fill( )方法有两种参数类型。该方法可将指定的int值分配给int型数组的每个元素。语法如下fill(int[ ] a,int value)a要先进行元素替换的数组。value要储存数组中所有元素的值import java.util.Arrays;//导入java.util.Arrays类public class Swap {//创建类public static void main(String[] args) {//主方法int arr[]new int[5];//创建int型整数Arrays.fill(arr,8);//使用同一个值对数组进行填充for(int i0;iarr.length;i) {//循环遍历数组中的元素System.out.println(第i个元素是arr[i]);//将数组中的元素依此输出} } }fill (int[] a,int fromlndex,int tolndex,int value)该方法将指定的int值分配给int型数组指定范围中的每个元素。填充的范围从索引fromIndex包括一直到索引toIndex不包括。如果fromIndextoIndex则填充范围为空语法如下fill (int[] a,int fromlndex,int tolndex,int value)a要进行填充的数组fromIndex要使指定值填充的第一个元素的索引包括。toIndex要使用指定值填充的最后一个元素的索引不包括。value要分配给数组指定范围中的每个元素的值。import java.util.Arrays;//导入java.util.Arrays类public class Displase {//创建类public static void main(String[] args) {//主方法int arr[ ]new int[ ] {45,12,2,10};//定义初始化int型数组arrArrays.fill(arr,1,2,8);//使用fill()方法替换数组指定范围内的元素for(int i0;iarr.length;i) {//循环遍历数组中的元素System.out.println(第i个元素是arr[i]);//将数组中的每个元素输出} } }示例三对数组进行排序通过Arrays类的静态方法sort()可以实现对数组的排序。Sort()方法提供了多种重载形式可对任意的数组进行升序排序。语法如下Arrays.sort(object) 其中object是指进行排序的数组名称。import java.util.Arrays;//导入java.util.Arrays类public class Taxis {//创建类public static void main(String[] args) {//主方法int arr[]new int[] {23,42,12,8};//声明数组Arrays.sort(arr);//将数组进行排序for(int i0;iarr.length;i) {//循环遍历排序后的数组System.out.println(arr[i]);//将排序后数组中的各个元素输出} } }示例四复制数组Arrays类的compOf()方法与copyOfRange()方法可以实现对数组的复制。copyOf()方法是复制数组至指定长度copyOfRange()方法则将指定数组的指定长度复制到一个新数组中。copyOf()方法该方法提供了多种重载形式用于满足不同类型数组的复制。语法如下copyOf(arr,int newlength)arr:要进行复制的数组newlengthint型常量指复制后的新数组长度。如果新数组的长度大于数组arr的长度则用0填充根据复制数组的类型来决定填充的值整型数组用0填充char型数组则使用null来填充如果复制后的数组长度小于数组arr的长度则会从数组arr的第一个元素开始截取至满足新数组长度为止。import java.util.Arrays;//导入java.util.Arrays类public final class Cope {//创建类public static void main(String[] args) {//主方法int arr[]new int[] {23,42,12};//定义数组int newarr[]Arrays.copyOf(arr,5);//复制数组arrfor(int i0;inewarr.length;i) {//循环遍历复制后的新数组System.out.println(newarr[i]);//将新数组输出} } }copyOfRange()方法该方法同样提供了多种重载形式。语法如下copyOfRange(arr,int formlndex,int tolndex)arr:要进行复制的数组对象。formIndex:指定开始复制数组的索引位置。formIndex必须在0至整个数组的长度之间。新数组包括索引是formIndex的元素。toIndex:要复制范围的最后索引位置。可大于数组arr的长度。新数组不包括索引是toIndex的元素。import java.util.Arrays;//导入java.util.Arrays类public class Repeat {//创建类public static void main(String[] args) {//主方法int arr[]new int[] {23,42,12,84,10};//定义数组int newarr[]Arrays.copyOfRange(arr,0,3);//复制数组for(int i0;inewarr.length;i) {//循环遍历复制后的新数组System.out.println(newarr[i]);//将新数组中的每个元素输出} } }示例五按照索引复制数组在项目中创建Repeta类在主方法中创建一维数组并将数组中索引位置是0~3的元素复制到新数组中最后将新数组输出。import java.util.Arrays;//导入java.util.Arrays类public class Repeat {//创建类public static void main(String[] args) {//主方法int arr[]new int[] {23,42,12,84,10};//定义数组int newarr[]Arrays.copyOfRange(arr,0,3);//复制数组for(int i0;inewarr.length;i) {//循环遍历复制后的新数组System.out.println(newarr[i]);//将新数组中的每个元素输出} } }示例六查询数组Arrays类的binarySearch()方法可使用二分搜索来搜索指定数组以获得指定对象。该方法返回要搜索元素的索引值。binarySearch()方法提供了多种重载形式用于满足各种类型数组的查找需要。binarySearch()方法有两种参数类型。语法如下binarySearch(Object[] a,Object key)a:要搜索的数组key:要搜索的值如果key包含在数组中则返回搜索值得索引否则返回-1或“-”插入点。插入点是搜索键将要插入数组得那一点即第一个大于此键得索引。查询数组元素代码如下int arr[] new int[]{4,25,30};//创建并初始化数组Arrays.sort(arr);//将数组进行排序int index Arrays.binarySearch(arr,8);上面的代码中变量index的值是元素“8”在数组arr中索引在0~1内的索引位置。由于在指定的范围内并不存在元素“8”index的值是“-”插入点。如果对数组进行排序元素“8”应该在“25”的前面因此插入点应该是元素“25”的索引值2所有index的值是-2.如果数组中的所有元素都小于指定的键则为a.length这保证了当且仅当此键被找到时返回的值将大于等于0。inarySearch(Object[]a,int fromIndex,int toIndex,Object key)该方法在指定的范围内检索某一元素。a:要进行检索的数组fromIndex:指定范围的开始处索引包含。toIndex:指定范围的结束处索引不包含。key:要搜索的元素。使用该方法前同样要对数组排序这样才能获得准确的索引值。如果要搜索的元素key在指定的范围内则返回搜索键的索引否则返回“-1”或者“-”插入点。如果范围中的所有元素都小于指定的键则插入点为toIndex注意这保证了当且仅当此键被找到返回的值将大于等于0。在指定范围内查找元素在数组中的索引位置在项目中创建Rakel类在主方法中创建String数组实现查找元素“cd”在指定范围的数组str中的索引位置。import java.util.Arrays;//导入java.util.Arrays类public class Rakel {//创建类public static void main(String[] args) {//主方法String str[]new String[] {ab,cd,ef,yz};//定义String型数组strArrays.sort(str);//将数组进行排序int indexArrays.binarySearch(str,0,2,cd);//在指定范围内搜索元素cd的索引位置System.out.println(cd的索引位置是index);//将索引输出} } }示例七冒泡排序在项目中创建BubbleSort类这个类的代码将对一个int型的一维数组中的元素进行冒泡排序。public class BubbleSort {//创建类public static void main(String[] args) {//主方法int[]array {63,4,24,1,3,15};//创建一个数组元素是乱序的BubbleSort sorter new BubbleSort();//创建冒泡排序类的对象sorter.sort(array);//调用排序方法对数组排序}public void sort(int[]array) {for(int i1;iarray.length;i) {//比较相邻两个元素较大的元素往后冒泡for(int j0;jarray.length-i;j) {if(array[j]array[j1]) {int temp array[j];//把第一个元素值保存到临时变量中array[j]array[j1];//把第二个元素值保存到第一个元素单元中array[j1]temp;//把临时变量第一个元素原值保存到第二个元素单元中 } } }showArray(array);//输出冒泡排序后的数组元素 }public void showArray(int[]array) {for(int i:array) {//遍历数组System.out.print(i);//输出每个数组元素值 }System.out.println(); } }示例八直接选择排序直接选择排序的基本思想是将指定排序位置元素与其他数组元素分别对比如果满足条件就交换元素值。注意这里与冒泡排序的区别不是交换相邻的元素而是把满足条件的元素与指定的排序位置元素交换如果从最后一个元素开始排序这样排序好的位置逐渐扩大直至整个数组都变成已排序好的格式。public final class SelectSort {//创建类public static void main(String[] args) {//主方法int[]array {63,4,24,1,3,15};//创建一个数组元素是乱序的SelectSort sorternew SelectSort();//创建直接排序类的对象sorter.sort(array); }public void sort(int[]array) {int index;for(int i1;iarray.length;i) {index 0;for(int j1;jarray.length-i;j) {if(array[j]array[index]) {indexj;} }//交换在位置array.length-1和index最大值上的两个数int temparray[array.length-i];//把第一个元素值保存到临时变量中array[array.length-i]array[index];//把第二个元素值保存到第一个元素单元中array[index]temp;//把临时变量第一个元素原值保存到第二个元素单元中}showArray(array);//输出直接选择排序后的数组元素 }public void showArray(int[]array) {for(int i:array) {//遍历数组System.out.print(i);//输出每个数组元素值}System.out.println();} }示例九反转排序反转排序的基本思想就是把数组最后一个元素与第一个元素替换倒数第二个元素和第二个元素替换以此类推直到把所有数组元素反转替换。public class ReverseSort {//创建类public static void main(String[] args) {//主方法int[]array {10,20,30,40,50,60};//创建一个数组ReverseSort sorternew ReverseSort();//创建反转排序类的对象sorter.sort(array);//调用排序对象方法将数组反转}public void sort(int[]array) {System.out.println(数组原有内容);showArray(array);//输出排序前的数组元素int temp;int lenarray.length;for(int i0;ilen/2;i) {temp array[i];array[i]array[len-1-i];array[len-1-i]temp;}System.out.println(数组反转后的内容);showArray(array);//输出排序后的数组元素}public void showArray(int[]array) {for(int i:array) {//遍历数组System.out.print(\ti);//输出每个数组元素值}System.out.println(); } }
返回列表