一、二維數組以及多元數組
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
//System.out.println(array4[i]);
for(int j=0;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
for (int j = 0; 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
for (int j = 0; 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
for (int j = 0; 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
for (int j = 0; 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
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、比較
//定義 最小值下标 最大值下标 中間值下标 查找的目标下标
//最小值小标
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