Java(二维数组)

Java二维数组与矩阵转置
本文介绍了Java中二维数组的定义,强调二维数组本质上是一维数组的数组,重点讲解了如何创建和初始化二维数组,特别是如何进行矩阵的转置操作。通过示例展示了如何构建矩阵,接收用户输入并转置,同时提供了五子棋游戏的初步概念,包括棋盘初始化、交替下棋的逻辑以及游戏胜利的判断条件。
二维数组定义格式
数据类型[][] 数组名=new int[row][col];
数据类型[][] 数组名=new int[][]{ {第1行},{第2行},{第3行}};
数据类型[][] 数组名={{第1行},{第2行},{第3行}};
提示
  • 二维数组的本质就是一个一维数组!只不过所存储的元素是另一个一维数组而已
  • 表格或矩阵中的数据可以表示为二维数组
  • 二维数组中的元素通过行和列的下标来访问
警告

1访问行下标为2、列下标为1的元素是一种常见的错误。
在这里插入图片描述

注意
使用语法new int[5][ ]创建数组时,必修指定第一个下标。语法new int[ ] [ ]时错误的
思路

创建一个数组,并用createMatrix(rowNumber,columnNumber)调用,然后在createMatrix(int x,int y)中进行随机赋值(行,列)然后通过循环 array[i][j] = input.nextInt()可以让用户在矩阵中随机赋值。
在通过int transitionResult[][] = transformMatrix(matrix)调用使输入的矩阵进行转置。 int a[][] = new int[matrix[0].length][matrix.length]先构建一个新的矩阵,行使原矩阵的列,列是原矩阵行。 a[i][j] = matrix[j][i];最后通过循环输出转置后的矩阵

输入以矩阵,输出该矩阵的转置


import java.util.Scanner;

 class Demo02 {
     public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("input the rowNumber and columnNumber");
        int rowNumber = input.nextInt();
        int columnNumber = input.nextInt();
        int matrix[][] = createMatrix(rowNumber,columnNumber);
        
        
        int transitionResult[][] = transformMatrix(matrix);
        System.out.println("转置的矩阵:");
        outputMatrix(transitionResult);,
     }
     public static void outputMatrix(int matrix[][]){
        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();
        }
    }
    public static int[][] createMatrix(int x,int y){
        Scanner input = new Scanner(System.in);
        System.out.println("please the datas");
        int array[][] = new int[x][y];
        for(int i = 0;i < array.length;i ++){
            for(int j = 0;j < array[i].length;j++){
                array[i][j] = input.nextInt();
            }
        }
    return array;
    }
    public static int[][] transformMatrix(int matrix[][]){
        int a[][] = new int[matrix[0].length][matrix.length];
            for(int i = 0;i < matrix[0].length;i++){
                for(int j = 0;j < matrix.length;j++){
                    a[i][j] = matrix[j][i];
                }
            }
    return a;
    }
   

 
}
思路

输入一些定值(SIZE 空棋子(NULL_CHESS)黑棋子(BLACK_CHESS)白棋子(WHITE_CHESS)
initBoard()棋盘的制作和 showBoard()棋盘的打印然后 startGame()开始游戏。开始判断谁开始下棋player%2==0),每次player++使黑白轮流下棋(!putChess(BLACK_CHESS)在来判断下棋的时候这个位置是否有棋子,如果有重新下 用continue结束。putChess(String chess)来让用户输入 board[x][y]=chess将棋子放置在你输入的位置isGameOver来判断何时才能胜利,遍历里边每一个点分别判断横j<11,竖i<11,右下i<11&&j<11,右上i>3&&j<11,只要完成其中一个就胜利。否则 count棋子的个数等于整盘棋的大小就是和局
五子棋

import java.util.Scanner;
class WuZiQi{
    //定义一个全局的棋盘
    public static String[][] board;
    //定义棋盘的尺寸size*size final类型 不可修改变量的值  // 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;
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值