一.二维排列及多维排列
1、二维数组定义:
? 用一维数组定义各元素也是数组元素,这样的数组称为“二维数组”
? 多维数组是指在一维数组中重新定义二维数组和3位数组等。
? 一维数组定义int [ ] array={ 1,2,3 }
//定义数组各要素为一维数组的3个长度的二维数组
int [][] arrays={{},{},{};
或者
int [][] arrays=new int [3][2]; //等号右边的左边[]表示二维数组的长度。 这里,2可以省略,3可以省略
//注意:等号左侧有几个[]表示几个维度
//1,定义二维数组
int[][]天线阵;
//定义时给二维数组分配了3个长度的二维数组中的一维数组的长度不一定相等
int [ ] [ ]阵列2={ 1,2,3 },{ 4,5 },{ 7,8 }
//只指定大小进行定义,不提供初始值
int [ ] [ ]阵列3=new int [3] [ ]; //等价{}、{}、{}}
//array3[0][0]=1; //赋值时空指针异常。 因为里面的一维数组是空的
//定义三个长度的二维数组,其中元素的长度为2
int array4[][]=new int[3][2];
//为元素赋值
array4[0][0]=1;
//输出二维数组中的所有元素
for(intI=0; I
//system.out.println(Array4[I];
for(intj=0; Jj
system.out.println(Array[I][j];
}
}
二.二维序列的应用
定义1、5*5的矩阵,计算最大值最小值
公共类测试{
publicstaticvoidmain (字符串[ ] args ) {
定义//5*5的二维数组
int [ ] [ ]阵列=new int [5] [5];
//定义并初始化最大值
int max=0;
//定义最小值并初始化
int min=0;
//为二维数组的每个元素指定0-100的整数值,以遍历输出二维数组
for(intI=0; I
for(intj=0; Jj
array[i][j]=(int ) (math.random(*100 );
system.out.print (array [ I ] [ j ] 't ' );
}
System.out.println (; //换行
}
//将数组的第一个元素指定给max
max=array[0][0];
for(intI=0; I
for(intj=0; Jj
//如果数组中的元素大于max,则将元素指定给max
if(array[I][j]=max ) {
max=array[i][j];
}
}
}
//输出二维数组的最大值
System.out.println ('最大值为' max );
//将数组的第一个元素指定给min
min=array[0][0];
for(intI=0; I
for(intj=0; Jj
//如果元素小于min,则将元素分配给min
if(array(I ) j )=min ) {
min=array[i][j];
}
}
}
//输出二维数组中的最小值
System.out.println ('最小值为' min );
}
}
2、五子棋游戏
公共类测试{
//定义字符串类型20*20的二维数组
staticstring [ ] [ ] qipan=new string [ 20 ] [ 20 ]
publicstaticvoidmain (字符串[ ] args ) {
system.out.println---------------- -五子棋游戏
//初始化棋盘
for(intI=0; I
for(intj=0; Jj
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
for (int j = 0; 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
for (int j = 0; 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[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
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("目标不存在");
}
}
}
原文:https://www.cnblogs.com/hss945/p/13797668.html