Java二维数组以及多维数组的定义及应用
一、二维数组以及多维数组
1、二维数组的定义:
在一维数组中定义每一个元素也是一个数组元素,这样的数组称为”二维数组“
多维数组就是在一维数组上再次定义二维数组或三位数组等。
一维数组定义 int [] array={1,2,3}
//定义三个长度的二维数组,其数组的每一个元素是一个一维数组
int [][] arrays={{},{},{}};
或者
int [][] arrays=new int [3][2];//等号右边的左边[]中表示二维数组的长度,其中2可以省略,3不能省略
//注意:等号左边有几个[]就表示几维

//1、定义二维数组
int [][] array;
//定义时给二维数组赋值 3个长度的二维数组里面的一维数组的长度不一定相等
int [][] array2={{1,2,3},{4,5},{7,8}}
//定义时只指定大小,不给定初始值
int [][]array3=new int[3][];//等价{{},{},{}}
//array3[0][0]=1;//赋值时 空指针异常,因为里面的一维数组是空的
//定义一个3个长度的二维数组,里面的元素长度是2
int array4[][]=new int[3][2];
//给元素赋值
array4[0][0]=1;
//输出二维数组中的所有元素
for(int i=0;i<array4.length;i++){
//System.out.println(array4[i]);
for(int j=0;j<array4[i].length;j++){
System.out.println(array[i][j]);
}
}
二、二维数组的应用
1、定义5*5的矩阵,计算最大值最小值
public class Test{
public static void main(String[] args) {
//定义一个5*5的二维数组
int [][] array=new int[5][5];
//定义最大值,并初始化
int max=0;
//定义最小值,并初始化
int min=0;
//为二维数组中的每一个元素赋上一个0-100的整数值,并遍历输出二维数组
for (int i = 0; i <array.length ; i++) {
for (int j = 0; j <array[i].length ; j++) {
array[i][j]=(int)(Math.random()*100);
System.out.print(array[i][j]+"\t");
}
System.out.println();//换行
}
//将数组中的第一个元素赋值给max
max =array[0][0];
for (int i = 0; i <array.length ; i++) {
for (int j = 0; j <array[i].length ; j++) {
//如果数组中元素大于max,则将元素赋值给max
if(array[i][j]>=max){
max=array[i][j];
}
}
}
//输出二维数组中的最大值
System.out.println("最大值为:"+max);
//将数组中的第一个元素赋值给min
min =array[0][0];
for (int i = 0; i <array.length ; i++) {
for (int j = 0; j <array[i].length ; j++) {
//如果元素小于min,则将元素赋值给min
if(array[i][j]<=min){
min=array[i][j];
}
}
}
//输出二维数组中的最小值
System.out.println("最小值为:"+min);
}
}
2、五子棋游戏
public class Test{
//定义一个字符串型20*20的二维数组
static String [][] qipan=new String[20][20];
public static void main(String[] args) {
System.out.println("------------------------------五子棋游戏------------------------------");
//初始化棋盘
for (int i = 0; i <qipan.length; i++) {
for (int j = 0; j <qipan[i].length; j++) {
qipan[i][j]="+";
}
}
printQipan();
System.out.println("游戏开始:");
Scanner sc=new Scanner(System.in);
while(true) {
System.out.println("请玩家(黑棋)落子:");
System.out.print("请输入棋子的行数(1-20):");
int num1 = sc.nextInt();
System.out.print("请输入棋子的列数(1-20):");
int num2 = sc.nextInt();
if (num1 <= 0 || num1 > 20 || num2 <= 0 || num2 > 20 ) {
System.out.println("落子超出棋盘边界,请重新落子!");
continue;
} else {
if( qipan[num1 - 1][num2 - 1] != "+"){
System.out.println("该位置已有棋子,请重新落子!");
continue;
}else{
qipan[num1-1][num2-1]="";
}
}
//白棋落子
int row=0;
int col=0;
// System.out.println("白棋思考中...");
while(true){
row=(int)(Math.random()*20);
col=(int)(Math.random()*20);
if(qipan[row][col]=="+"){
break;
}
}
qipan[row][col]="●";
//打印棋盘
printQipan();
//判断输赢
if(judge()){
System.out.println(s+"赢了");
break;
}
}
}
//打印棋盘
public static void printQipan(){
for (int i = 0; i <qipan.length ; i++) {
for (int j = 0; j <qipan[i].length ; j++) {
System.out.print(qipan[i][j]+"\t");
}
System.out.println();
}
}
//判断输赢的方法
static String s="";
public static boolean judge(){
boolean flag=false;
for (int i = 0; i <qipan.length; i++) {
for (int j = 0; j <qipan[i].length ; j++) {
if(qipan[i][j]==""||qipan[i][j]=="●"){
//判断横向
if(j<16&&
qipan[i][j]==qipan[i][j+1]
&&qipan[i][j]==qipan[i][j+2]
&&qipan[i][j]==qipan[i][j+3]
&&qipan[i][j]==qipan[i][j+4]){
s=qipan[i][j];
flag=true;
break;
}
//判断右斜下
else if(i<16&&j<16&&qipan[i][j]==qipan[i+1][j+1]
&&qipan[i][j]==qipan[i+2][j+2]
&&qipan[i][j]==qipan[i+3][j+3]
&&qipan[i][j]==qipan[i+4][j+4]){
s=qipan[i][j];
flag=true;
break;
}
//判断纵向
else if(i<16&&qipan[i][j]==qipan[i+1][j]
&&qipan[i][j]==qipan[i+2][j]
&&qipan[i][j]==qipan[i+3][j]
&&qipan[i][j]==qipan[i+4][j]){
s=qipan[i][j];
flag=true;
break;
}
//判断左斜下
else if(i<16&&j>3&&qipan[i][j]==qipan[i-1][j-1]
&&qipan[i][j]==qipan[i-2][j-2]
&&qipan[i][j]==qipan[i-3][j-3]
&&qipan[i][j]==qipan[i-4][j-4]){
s=qipan[i][j];
flag=true;
break;
}
}
}
}
return flag;
}
}
拓展:利用二分法查找数组中的元素
public class Test {
public static void main(String[] args) {
// 1、指定一个20个长度的数组 随机数
int [] array=new int[20];
for (int i = 0; i <array.length; i++) {
array[i]=(int)(Math.random()*100);
}
//输出数组中的每一个元素
System.out.println("数组中的元素为:");
System.out.println(Arrays.toString(array));
// 2、排序 (升序)
Arrays.sort(array);
//输出排序后的数组
System.out.println("排序后的数组为:");
System.out.println(Arrays.toString(array));
// 3、输入一个目标数
Scanner sc=new Scanner(System.in);
System.out.print("请输入想要查找的数字:");
int num=sc.nextInt();
// 3、比较
//定义 最小值下标 最大值下标 中间值下标 查找的目标下标
/**
* 最小下标 0
* * 最大下标 length-1
* *
* * 循环条件: 最小值小标<=最大值下标
* 中间下标: middle = (最小值+最大值)/2
* * 如果中间值比目标大 说明 在左边 改变最大值下标 = 中间值下标-1
* * 如果中间值比目标小 说明 在右边 改变最小值小标 = 中间值下标+1
* * 如果相等 就break
* * 一直这样比较 结束的条件是什么
*/
//最小值小标
int minIndex=0;
//最大值下标
int maxIndex=array.length-1;
//中间值下标
int middle;
//目标值下标
int index=-1;
//计数器
int count=0;
while(minIndex<=maxIndex){
count++;
middle=(minIndex+maxIndex)/2;
if(num<array[middle]){
maxIndex=middle-1;
}else if(num>array[middle]){
minIndex=middle+1;
}else {
index=middle;
break;
}
}
if(index!=-1){
System.out.println("目标已找到");
System.out.print("共查询次数:"+count+"\n");
System.out.print("目标数下标为:"+index);
}else{
System.out.println("目标不存在");
}
}
}
Java二维数组以及多维数组的定义及应用的更多相关文章
- JAVA二维数组的复制
JAVA二维数组的复制 笔者今天做一道ccf题目时,遇到要将二维数组拷贝复制时,没有用常规的那种一个一个数的复制,用的是System.arraycopy()来进行复制,下面介绍这个函数的一些注意点: ...
- java 二维数组的行列长度
在 java 中,其实只有一维数组,而二维数组是在一维数组中嵌套实现的.比如 int[][] a = {{},{},{},{}} 要取行数和某一行的列数可以 : int rowLen = a.leng ...
- 06-01 Java 二维数组格式、二维数组内存图解、二维数组操作
二维数组格式1 /* 二维数组:就是元素为一维数组的一个数组. 格式1: 数据类型[][] 数组名 = new 数据类型[m][n]; m:表示这个二维数组有多少个一维数组. n:表示每一个一维数组的 ...
- “全栈2019”Java第三十一章:二维数组和多维数组详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Java 二维数组
在 Java 中,二维数组与一维数组一样,但是不同于 C 中的二维数组: 1. 在 Java 中,二维数组可以看成是以数组为元素的数组,例如: int a[][] = {{1,2},{3,4,5,6 ...
- Java 二维数组,排序、切换顺序,查表法二进制十进制,这班查找、排序(冒泡、选择)、遍历,获取最大小值(4)
Java 二维数组,排序.切换顺序,查表法二进制十进制,折半查找.排序(冒泡.选择).遍历,获取最大小值(4)
- 062 01 Android 零基础入门 01 Java基础语法 07 Java二维数组 01 二维数组应用
062 01 Android 零基础入门 01 Java基础语法 07 Java二维数组 01 二维数组应用 本文知识点:二维数组应用 二维数组的声明和创建 ? 出现空指针异常 数组的名字指向数组的第 ...
- Java二维数组转成稀疏sparsearray数组
稀疏数组 基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组. 稀疏数组的处理方法是: 记录数组一共有几行几列,有多少个不同的值 把具有不同值的元素的行列及值记 ...
- 【Java学习笔记之八】java二维数组及其多维数组的内存应用拓展延伸
多维数组声明 数据类型[][] 数组名称; 数据类型[] 数组名称[]; 数据类型数组名称[][]; 以上三种语法在声明二维数组时的功能是等价的.同理,声明三维数组时需要三对中括号,中括号的位置可以在 ...
- Java二维数组的概念和使用方法
二维数组 数组的数组---二维数组的每一个元素是一个一维数组 定义格式 数据类型[][] 数组名 = new 数据类型[二维数组的长度/包含的一维数组的个数][每个一维数组的长度]; int[][] ...
随机推荐
- Windows 系统下怎么获取 UDP 本机地址
Windows 系统下怎么获取 UDP 本机地址 我们知道 UDP 获取远端地址非常简单,通常接口 recvfrom 就可以直接获取到远端的地址和端口:如果获取 UDP 的本机地址就需要点特殊处理了, ...
- springsecurity-jwt整合
2 springsecurity-jwt整合 欢迎关注博主公众号「Java大师」, 专注于分享Java领域干货文章http://www.javaman.cn/sb2/jwt 2.1整合springse ...
- Android系统服务DropBoxManagerService详解与实践应用
作者:vivo 互联网客户端团队- Ma Lian 借助系统DropBoxManagerService对于系统文件目录dropbox管理的设计,了解其文件管理的规则.运行机制.读写机制.管控机制,根据 ...
- Linux 磁盘空间查看及清理
1. 查看磁盘空间 查看当前目录各文件夹大小 du -ah -x --max-depth=1 查看文件大小 ls -lh 查看系统空间占用 df -h 2. 磁盘空间清理 Linux清除文件内容 ca ...
- LeeCode 433 最小基因变化
LeeCode 433 最小基因变化 题目描述: 基因序列可以表示为一条由 8 个字符组成的字符串,其中每个字符都是 'A'.'C'.'G' 和 'T' 之一. 假设我们需要调查从基因序列 start ...
- 点亮LED灯_STM32第一课
基本原理 初始化Hal库 HAL_Init(); 系统时钟 SystemClock_Config(); GPIOB初始化:GPIOB模式为推挽输出,GPIO引脚为Pin_5.0.1代表红绿蓝LED ...
- Uber SRE 实践:运维大型分布式系统的一些心得
本文是 Uber 的工程师 Gergely Orosz 的文章,原文地址在:https://blog.pragmaticengineer.com/operating-a-high-scale-dist ...
- 归并排序c++(逆序对)
归并排序c++(逆序对) 目录 题目链接 思路 算法 分离数组 合并 代码 目录 归并排序(Merge Sort)是建立在归并操作上的一种既有效又稳定的排序算法,该算法是采用分治法(Divide an ...
- [Opencv-C++] 3. opencv数据类型
文章目录 Point类 cv::Scalar类 size类 cv::Rect类 cv::RotatedRect类 固定矩阵类 固定向量类 复数类 工具函数 模板结构 Point类 在大多数程序中,Po ...
- [Pytorch框架] 2.5 循环神经网络
文章目录 2.5 循环神经网络 2.5.1 RNN简介 RNN的起因 为什么需要RNN RNN都能做什么 2.5.2 RNN的网络结构及原理 RNN LSTM GRU 2.5.3 循环网络的向后传播( ...