1.二维数组:二维数组的本质就是一个一维数组!只不过所存储的元素是另一个一维数组而已。(行列式,矩阵)
1)三种定义格式:
数据类型[][] 数组名=new int[row][col];
数据类型[][] 数组名=new int[][]{ {第1行},{第2行},{第3行}};
数据类型[][] 数组名={{第1行},{第2行},{第3行}};
注意: 使用语法 new int[][]创建数组时,必须指定第一个下标
2)二维数组的长度:
定义一个数组:int[][] x=new int[3][4]; 数组x的长度为x.length; x[0].length是数组x[0]的长度。如图所示
3)锯齿数组:二维数组中的每一行本身就是一个数组,因此,各行的长度就可以不同, 如下图所示:
4)遍历二维数组:
int[][] matrix=new int[5][4];
for(int i=0;i<matrix.length;i++){ //二维数组的行数
for(int j=0;j<matrix[i].length;j++){ //二维数组每行的个数
System.out.print(matrix[i][j]+" ");
}
System.out.println();
}
5) 矩阵的转置的代码如下:
import java.util.Scanner;
class Zhuanzhi{
public static void main(String args[]){
Scanner Sc = new Scanner(System.in);
System.out.print("请输入二维数组的行和列:");
int row = Sc.nextInt(); //数组arr的行
int col = Sc.nextInt(); //数组arr的列
double arr[][] = new double[row][col]; //创建数组arr
for(int i=0;i<row;i++){ //遍历数组对数组初始化
for(int j=0; j<col;j++){
arr[i][j]=Sc.nextDouble();
}
}
double newarr[][] = new double[col][row]; //创建新数组 将原数组的行和列颠倒
for(int i=0;i<col;i++){
for(int j=0; j<row;j++){
newarr[i][j] = arr[j][i]; //将原数组的第j行第i列元素赋给新数组的第i
//行第j列
System.out.print(newarr[i][j]+" ");
}
System.out.println();
}
}
}
6)矩阵的乘法:设A为m*p的矩阵,B为的p*n矩阵,那么称m*n的矩阵C为矩阵A与B的乘积,记作C=AB,其中矩阵C中 的第i行第j列元素可以表示为:
class juZhenMutil{
public static void main(String args[]){
int[][] arr = new int[][]{
{1,2,3},
{4,5,6}
};
int[][] arr1 = new int[][]{
{1,4},
{2,5},
{3,6}
};
int[][] newarr = new int[arr.length][arr1[0].length]; //新数组的行为arr的行
//列为arr1的列
//遍历新数组对其赋值
for(int i=0;i<newarr.length;i++){
for(int j=0;j<newarr[i].length;j++){
int sum=0;
for(int k=0;k<arr1.length;k++){
sum+=arr[i][k]*arr1[k][j]; //矩阵乘法公式
}
newarr[i][j]=sum;
System.out.print(newarr[i][j]+" ");
}
System.out.println();
}
}
}
7)编写代码可以完成五子棋的基本操作:
import java.util.Scanner;
class WuZiQi{
//定义一个全局的棋盘
public static String[][] board;
//定义棋盘的尺寸size*size final类型 不可修改变量的值
public static final int SIZE=15;
public static final String NULL_CHESS="+ "; //空棋子
public static final String BLACK_CHESS="X "; //黑棋子
public static final String WHITE_CHESS="O "; //白棋子
public static Scanner scanner=new Scanner(System.in);
public static void main(String[] args){
//制作棋盘
initBoard();
//打印棋盘
showBoard();
//开始游戏
startGame();
}
public static void startGame(){
int player=0;
int result=0;
while((result=isGameOver())==0){
if(player%2==0){ //黑方
System.out.println(">>>请黑方下棋:");
if(!putChess(BLACK_CHESS)){
System.out.println(">>>此处已有棋子,请从新下棋!");
continue;
}
}else{ //白方
System.out.println(">>>请白方下棋:");
if(!putChess(WHITE_CHESS)){
System.out.println(">>>此处已有棋子,请从新下棋!");
continue;
}
}
player++;
}
if(result==1){
if(player%2==1){
System.out.println(">>>游戏结束!黑方胜!");
}else{
System.out.println(">>>游戏结束!白方胜!");
}
}else{
System.out.println(">>>游戏结束!和棋!");
}
}
public static int isGameOver(){
int count=0;
//累计棋子的个数 然后再判断是否五子连珠
for(int i=0;i<board.length;i++){
for(int j=0;j<board[i].length;j++){
if(!board[i][j].equals(NULL_CHESS)){
count++;
//当前的坐标 i j
//向右是否连珠 (i,j) (i,j+1) (i,j+2) (i,j+3) (i,j+4)
if(j<11){
if(board[i][j].equals(board[i][j+1])
&&board[i][j].equals(board[i][j+2])
&&board[i][j].equals(board[i][j+3])
&&board[i][j].equals(board[i][j+4])){
return 1;
}
}
//向下是否连珠
if(i<11){
if(board[i][j].equals(board[i+1][j])
&&board[i][j].equals(board[i+2][j])
&&board[i][j].equals(board[i+3][j])
&&board[i][j].equals(board[i+4][j])){
return 1;
}
}
//向右下是否连珠
if(i<11&&j<11){
if(board[i][j].equals(board[i+1][j+1])
&&board[i][j].equals(board[i+2][j+2])
&&board[i][j].equals(board[i+3][j+3])
&&board[i][j].equals(board[i+4][j+4])){
return 1;
}
}
//向右上是否连珠
if(i>3&&j<11){
if(board[i][j].equals(board[i-1][j+1])
&&board[i][j].equals(board[i-2][j+2])
&&board[i][j].equals(board[i-3][j+3])
&&board[i][j].equals(board[i-4][j+4])){
return 1;
}
}
}
}
}
//判断和棋 棋子数==SIZE*SIZE
if(count==SIZE*SIZE){
return 2;
}
return 0;
}
public static boolean putChess(String chess){
System.out.print(">>>x=");
int x=scanner.nextInt()-1; //x 行
System.out.print(">>>y=");
int y=scanner.nextInt()-1; //y 列
if(board[x][y].equals(NULL_CHESS)){
board[x][y]=chess;
showBoard();
return true; //已下
}else{
showBoard();
return false; //未下
}
}
public static void showBoard(){
System.out.print(" ");
for(int i=1;i<=SIZE;i++){
System.out.printf("%-2d",i);
}
System.out.println();
int index=1;
for(int i=0;i<board.length;i++){
System.out.printf("%-3d",index++);
for(int j=0;j<board[i].length;j++){
System.out.print(board[i][j]);
}
System.out.println();
}
}
public static void initBoard(){
board=new String[SIZE][SIZE]; //字符串是引用数据类型 默认初始值null
for(int i=0;i<board.length;i++){
for(int j=0;j<board[i].length;j++){
board[i][j]=NULL_CHESS; //利用+打印棋盘
}
}
}
}