当前位置: 首页 > news >正文

12:java学习笔记:多维数组1

1维数组是是一行数字的输出,那么多维数组就是行列等等的数字

(这里主要写2D array)

12.1什么是二维数组

二维数组根据一维数组建立的,一维数组是一行数据,但是二维数组是一个行一个是列进行的。二维数组 = 多行(每行是一个一维数组)所以是一维数组的进阶版

12.2二维数组的创建与初始化

12.2.1二维数组的创建

首先,得创建一个二维数组才能初始化。

import java.util.Scanner;
public class r4 {public static void main(String[] args) {// TODO Auto-generated method stubScanner input = new Scanner(System.in);String [][] grades = new String[5][5];
}}

这里建立了 二维数组,是一个5\times 5的,这里前面的是行,后面的是列,是一个矩阵,当然在二维数组中,不一定需要行数等于列数的。

12.2.2二维数组的初始化

初始化二维数组有两个方法

12.2.2.1直接初始化赋值
​
int[][] weird = {{1, 2},{3, 4, 5},{6}
};​

同样可以赋值,并且二维数组是不需要行列数相同的,随便都行。

12.2.2.2用户输入

二维数组可以让用户输入,但是需要通过for循环实现。在这里2维数组,两个维度,所以必须使用for嵌套才行。

  for (int i = 0; i < matrix.length; i++) {for (int j = 0; j < matrix[i].length; j++) {System.out.print("请输入第 " + i + " 行第 " + j + " 列的值: ");matrix[i][j] = input.nextInt();}}

这个首先i是行数,然后j是列数,i很好理解每次i加一,然后i必须小于二维数组的长度才行。但是j的范围是比较奇怪的,j的范围是每一行的长度,每一行的长度就是列数,比如说第一行有4长度,那么列就是4长度。

然后用户可以输入自己想要输入的数字,从而写在对应的i,j中。

12.3二维数组的使用

同样还是一个增删改查的使用方法

和1维数组一样,无法增或者删,所以只写关于改于查的

12.3.1改

改与1维数组很像。

public class i {public static void main(String[] args) {// TODO Auto-generated method stubint[][] weird = {{1, 2},{3, 4, 5},{6}};weird[1][2] = 34;}}

直接写入你想要改的下标,(注意这里的1,2指的是第二行第三个数字改成34.)

下标还是从0开始,不管是行还是列都是这样。

12.3.2查

12.3.2.1长度查询

这里的长度查询是行的长度与列的长度查询,之前也写过了如何写行于列的长度,

matrix.length

行的长度(有几行),列的长度是每一行有多少个,便是列的长度

matrix[i].length
12.3.2.2遍历

这里的遍历选择使用for增强来写

在1维数组中,可以直接用一个for增强来遍历整个数组,但是在2维数组中需要使用两个for增强语句来写

第一步先把数组中的行分别保存到row中,然后再用1维数组的,把每一行的数字拿出来放到vol中

public class i {public static void main(String[] args) {// TODO Auto-generated method stubint[][] weird = {{1, 2},{3, 4, 5},{6}};weird[1][2] = 34;for(int[] row : weird) {for(int vol : row) {System.out.print(vol + " ");}System.out.println();}}}

然后最后打印每一个vol的值 然后呢 每一行中都需要空格,如果这一行循环结束,有System.out.println()来换行。

12.4二维数组的应用

二维数组通常应用在 表格登记价格,登记学生成绩,五子棋,围棋等等都需要使用到二维数组

这一篇中,写一个等级学生成绩的代码。

首先学习成绩的代码是一个表格,在表头中写号对应的

所以需要创建一个5*5的表格。并且需要把表头写好,因为表头不会改变,改变的下面的值

import java.util.Scanner;
public class r4 {public static void main(String[] args) {// TODO Auto-generated method stubScanner input = new Scanner(System.in);String [][] grades = new String[5][5];grades[0][0] = "学生";grades[0][1] = "数学";grades[0][2] = "英语";grades[0][3] = "物理";grades[0][4] = "语文";}
}

那么表头表示好后,因为需要用户输入,所以需要使用到for循环嵌套来进行

for(int i = 1;i<=grades.length-1;i++) {for(int j = 0;j<grades[i].length;j++) {

在这里i必须等于1因为第零行已经写完了(第零行是表头所以i需要从0改成1)

然后分析一下,表格有什么特殊性,第一列必须是名字,其他都是数字,然后呢第二列是数学成绩,第三行是英语成绩等等

所以这里就是分类讨论了,之前总结过,分裂讨论在代码中就是if语句,便可以写出来了

if(j==0) {System.out.println("第 " +  i + " 个学生名字是 ?");grades[i][j] = input.next();}else if(j==1) {System.out.println("第 " +  i + " 个同学的数学成绩是多少呢");grades[i][j] = input.next();}else if(j==2) {System.out.println("第 " +  i + " 个同学的英语成绩是多少呢");grades[i][j] = input.next();}else if(j==3) {System.out.println("第 " +  i + " 个同学的物理成绩是多少呢");grades[i][j] = input.next();}else if(j==4){System.out.println("第 " +  i + " 个同学的语文成绩是多少呢");grades[i][j] = input.next();}

这里当然也可以写成switch-case-default的形式

然后呢 最后使用for增强进行遍历 然后打印出来

System.out.println("成绩的表格是 ");for(String [] row : grades) {for(String vol : row) {System.out.print(vol+ " ");}System.out.println();}

那么总的代码是

import java.util.Scanner;
public class r4 {public static void main(String[] args) {// TODO Auto-generated method stubScanner input = new Scanner(System.in);String [][] grades = new String[5][5];grades[0][0] = "学生";grades[0][1] = "数学";grades[0][2] = "英语";grades[0][3] = "物理";grades[0][4] = "语文";for(int i = 1;i<=grades.length-1;i++) {for(int j = 0;j<grades[i].length;j++) {if(j==0) {System.out.println("第 " +  i + " 个学生名字是 ?");grades[i][j] = input.next();}else if(j==1) {System.out.println("第 " +  i + " 个同学的数学成绩是多少呢");grades[i][j] = input.next();}else if(j==2) {System.out.println("第 " +  i + " 个同学的英语成绩是多少呢");grades[i][j] = input.next();}else if(j==3) {System.out.println("第 " +  i + " 个同学的物理成绩是多少呢");grades[i][j] = input.next();}else if(j==4){System.out.println("第 " +  i + " 个同学的语文成绩是多少呢");grades[i][j] = input.next();}}}System.out.println("成绩的表格是 ");for(String [] row : grades) {for(String vol : row) {System.out.print(vol+ " ");}System.out.println();}}}

输出是

http://www.lryc.cn/news/608493.html

相关文章:

  • 如何分析Linux内存性能问题
  • 深度学习(鱼书)day09--与学习相关的技巧(前三节)
  • 2025牛客暑期多校训练营1(G,E,L,K,I)
  • 力扣 hot100 Day63
  • 使用 BERT 的 NSP 实现语义感知切片 —— 提升 RAG 系统的检索质量
  • Java试题-选择题(6)
  • 滚珠花键在汽车制造中有哪些高要求?
  • 记录一次Spring Cloud Gateway配置的跨域处理:解决 ‘Access-Control-Allow-Origin‘ 头包含多个值的问题
  • JavaScript将String转为base64 笔记250802
  • GCC(GNU Compiler Collection)与人工智能实例
  • 【前端:Html】--1.1.基础语法
  • [Linux入门] Ubuntu 系统中 iptables 的配置与使用
  • 公共卫生场景下漏检率↓76%:陌讯动态特征融合算法在口罩识别中的实战解析
  • GaussDB having 的用法
  • 适 配 器 模 式
  • 电力系统分析笔记:发电机与变压器的数学建模与运行状态详解
  • SPI通信中CS片选的两种实现方案:硬件片选与软件片选
  • Anthropic:跨越生产效能拐点的AI增长飞轮
  • Munge 安全认证和授权服务的工作原理,以及与 Slurm 的配合
  • 交互 Codeforces Round 1040 Interactive RBS
  • 深入 Go 底层原理(十一):Go 的反射(Reflection)机制
  • 基于深度学习的医学图像分析:使用GAN实现医学图像增强
  • SpringBoot 启动富文本文字更改
  • 基于 LightGBM 的二手车价格预测
  • 一种基于入侵杂草优化算法(IWO)的聚类算法,并与K-Means、高斯混合模型(GMM)进行对比,Matlab
  • 用键盘快速移动Word和WPS文字中的选中段落
  • 【笔试真题】2024秋招京东后端开发岗位-第一批笔试
  • 数据链路层、NAT、代理服务、内网穿透
  • 使用 MySQL Shell 进行 MySQL 单机到 InnoDB Cluster 的数据迁移实践
  • 数字化生产管理系统设计