零基础Java第九期:一维数组(二)和二维数组

devtools/2024/10/25 0:41:42/

目录

一、数组的练习

1.1. 顺序表查找

1.2. 二分查找

1.3. 冒泡排序

二、二维数组

2.1. 二维数组的性质

2.2. 不规则二维数组


一、数组的练习

1.1. 顺序表查找

     题目描述:给定一个数组, 再给定一个元素, 找出该元素在数组中的位置。

    利用for循环去遍历数组,找到之后返回下标,没有找到返回-1,代码如下:

public class Main {public static int Find(int[] arrays,int num){for(int i=0;i< arrays.length;i++){if(arrays[i]==num){return i;}}return -1;}public static void main(String[] args) {int[] arrays={8,7,4,10,25,16,2};System.out.println(Find(arrays,25));//调用Find方法,传入数组arrays和要查找的元素25}
}

1.2. 二分查找

      二分查找需要建立在一个有序的情况下,数学上我们学过二分法找零点,这个思路相信不用多说。如果这个数组是以升序排列的,元素分别是10,20,30,40,50,代码如下:

public class BinarySearch {public static int FindVal(int arrays[],int val){int left = 0;int right = arrays.length;while(left<=right){int mid = (left + right) / 2;if(val<arrays[mid]){//去左侧区间查找right = mid-1;}else if(val<arrays[mid]){//去右侧区间查找left = mid + 1;}else{//相等,说明找到了return mid;}}return -1;}public static void main(String[] args) {int[] arrays = {10,20,30,40,50,60};System.out.println(FindVal(arrays,4));}
}

1.3. 冒泡排序

      第一个for循环表示循环的趟数,假设数组里面共有n个元素,那么最多需要循环n-1趟;第二个for循环我要用画图的方式来描述:每比较完一个元素的次数会依次减小,怎么来体现这个减少呢?我们在j=arrays.length-1后面再减去一个i就能实现。

import java.util.Arrays;public class Main {public static void BubbleSort(int[] arrays){for(int i=0;i< arrays.length-1;i++){for(int j=0;j< arrays.length-1-i;j++){if(arrays[j]<arrays[j+1]){int tmp=arrays[j];arrays[j]=arrays[j+1];arrays[j+1]=tmp;}}}}public static void main(String[] args) {int[] arrays={20,64,73,5,108,84};System.out.println("排序前:"+ Arrays.toString(arrays));BubbleSort(arrays);System.out.println("排序后:"+Arrays.toString(arrays));int ret=Arrays.binarySearch(arrays,5);System.out.println(ret);}
}

二、二维数组

2.1. 二维数组的性质

 二维数组与一维数组的本质是一样的。命名规则有三种:

int[][] array1 = {{1,2,3},{4,5,6}};
int[][] array2 = new int[][]{{1,2,3},{4,5,6}};
int[][] array3 = new int[2][3];//前行后列

       与C语言中唯一不同的是,Java中的二维数组可以省略列,但不能省略行(可以实现为不规则二维数组,后面会讲)。二维数组的存储是怎样的?如下图所示,0下标与1下标存的就是两个一维数组的地址。

int[][] array = {{1,2,3},{4,5,6}};
System.out.println(array[0]);
System.out.println(array[1]);

遍历数组打印: 

System.out.println(Arrays.toString(array[0]));
System.out.println(Arrays.toString(array[1]));

数组的长度

System.out.println(array[0].length);
System.out.println(array[1].length);

 

如何确定二维数组的行数与列数呢?代码如下:

int[][] array={{1,2,3},{4,5,6}};
System.out.println(array.length);//确定行数
System.out.println(array[0].length);//确定列数

2.2. 不规则二维数组

       前面在二维数组的性质中提到过不规则二维数组, 下面是一个不规则二维数组的例子,运行,会出现如下报错:

int[][] array3 = new int[2][];for (int i = 0; i < array3.length; i++) {for (int j = 0; j < array3[i].length; j++) {System.out.println(array3[i][j]);}

       如果我们进行调试的话,可以看到,列数里面的默认值是null,null不能通过.length去访问,所以就会报错。如下图所示:

 

但如果我们这样做呢: 

int[][] array4=new int[2][];
array4[0] =new int[]{1,2,3,4};
array4[1] =new int[]{5,6,7};
for (int i = 0; i < array4.length; i++) {for (int j = 0; j < array4[i].length; j++) {System.out.println(array4[i][j]);}
}

 

 

好,以上就是二维数组的全部内容。 


http://www.ppmy.cn/devtools/128548.html

相关文章

未来医疗:大语言模型如何改变临床实践、研究和教育|文献精析·24-10-23

小罗碎碎念 这篇文章探讨了大型语言模型在医学领域的潜在应用和挑战&#xff0c;并讨论了它们在临床实践、医学研究和医学教育中的未来发展。 姓名单位名称&#xff08;中文&#xff09;Jan Clusmann德国德累斯顿工业大学埃尔朗根弗雷斯尼乌斯中心数字化健康研究所Jakob Nikola…

GitLab CVE-2024-6446、CVE-2024-6685 漏洞解决方案

极狐GitLab 近日发布安全补丁版本17.3.2, 17.2.5, 17.1.7&#xff0c;修复了17个安全漏洞&#xff0c;本分分享 CVE-2024-6446、CVE-2024-6685 两个漏洞详情及解决方案。 极狐GitLab 正式推出面向 GitLab 老旧版本免费用户的专业升级服务&#xff0c;为 GitLab 老旧版本进行专…

力扣动态规划基础版(斐波那契类型)

70. 爬楼梯https://leetcode.cn/problems/climbing-stairs/ 70.爬楼梯 方法一 动态规划 考虑转移方程和边界条件&#xff1a; f&#xff08;x&#xff09; f&#xff08;x -1&#xff09; f&#xff08;x - 2&#xff09;;f&#xff08;1&#xff09; 1&#xff1b;f&…

数据结构 —— 链式二叉树(C语言讲解)

目录 0.前言 1.链式存储的二叉树 2.二叉树的遍历 二叉树的前、中、后序遍历 前序遍历 中序遍历 后序遍历 二叉树的层序遍历 3.二叉树的其他操作 二叉树的结点个数 二叉树叶子结点个数 二叉树第k层结点个数 二叉树查找值为x的节点 二叉树的高度 判断二叉树是否是…

【mysql进阶】2-4. mysql 系统库

mysql System Schema (mysql系统库) Mysql Schema是⼀个系统库&#xff0c;表中存储了MySQL服务器运⾏时所需的信息。⼴义上&#xff0c;mysqlschema包含存储数据库对象元数据的数据字典和⽤于其他操作⽬的的系统表。数据字典表和系统表位于数据⽬录下⼀个名为 mysql.ibd 的表…

【MySQL】详解MySQL数据类型

一、数据类型 各类型的数值范围&#xff1a; 在MySQL中&#xff0c;整型可以指定是有符号的和无符号的&#xff0c;默认是有符号的。 可以通过UNSIGNED来说明某个字段是无符号的。对于int类型可能存放不下的数据&#xff0c;尽量不使用unsigned&#xff0c;unsigned int 同样可…

Rust编程语言变量的所有权(ownership)

文章目录 什么是所有权所有权规则转让所有权变量与数据交互的方式(一):移动变量与数据交互的方式(二):克隆只在栈上的数据:拷贝所有权与函数返回值与作用域引用和借用可变引用悬垂引用(Dangling References)引用的规则什么是所有权 所有权(ownership)是Rust 的核心功能之一…

GISBox vs CesiumLab:哪款GIS工具更适合你的项目?

在地理信息系统&#xff08;GIS&#xff09;领域&#xff0c;越来越多的用户开始关注GIS工具箱的选择&#xff0c;其中GISBox和CesiumLab是两款备受推崇的产品。那么&#xff0c;哪一款更适合你的需求呢&#xff1f;本文将从功能、使用体验和应用场景等方面&#xff0c;对GISBo…