井字棋

                                              井字棋

题目内容:

嗯,就是视频里说的那个井字棋。视频里说了它的基本思路,现在,需要你把它全部实现出来啦。

你的程序先要读入一个整数n,范围是[3,100],这表示井字棋棋盘的边长。比如n=3就表示是一个3x3的棋盘。然后,要读入n行,每行n个数字,每个数字是1或0,依次表示[0,0]到[n-1,n-1]位置上的棋子。1表示X,0表示O(大写字母O)。

你的程序要判断其中是否存在某一方获胜,获胜的条件是存在整行或整列或整条对角线或整条反对角线上是相同的棋子。如果存在,则输出代表获胜一方字母:X或O(大写字母X或O);如果没有任何一方获胜,则输出NIL(三个大写字母,中间是字母I(India的I)。

注意:所给的棋盘上的棋子分布可能出现同一个棋子有多处满足获胜的条件,但是不会出现两种棋子都获胜的情况。


输入格式:

一个代表棋盘大小的数字n,后面跟上nxn个0或1的数字。


输出格式:

三种输出之一:

  1. X
  2. O
  3. NIL

均为大写字母。


输入样例:

  1. 4
  2. 1 0 0 1
  3. 0 1 0 0
  4. 0 0 1 0
  5. 1 0 0 1


输出样例:

  1. X

package four;

import java.util.Scanner;

/*
 * 井字棋
 * */
public class WellChess {
	//该方法检查输入的大小
	public static boolean check(int size){
		if(size>=3&&size<=100){
			return true;
		}
		else{
			System.out.println("你输入的数字有误");
			return false;
		}
	}
	public static boolean checkNumber(int number){
		if((number==0)||(number==1)){
			return true;
		}
		System.out.print("请输入的数字是0和1");
		return false;
	}
	public static void match(int[][] chessboadr){
		boolean flag=true;//如果if(flag)成功了flag就为flase;接下来的比较就不需要了.
		//比较行 不成功的话就进行下个比较.
		if(flag){
			for(int i=0;i<chessboadr.length;i++){
				boolean compare=true;
				int value=chessboadr[i][0];
				//对行的值进行比较 一旦失败,就在循环,成功flag就为flase并输出结果。
				if(compare){
					for(int j=1;j<chessboadr[i].length;j++){
						if(value!=chessboadr[i][j]){
							compare=false;
						}
					}
				}
				if(compare){
					if(value==1){
						System.out.println("X");
					}
					if(value==0){
						System.out.println("O");
					}
					flag=false;
					break;
				}
			}
		}
		//比较列
		if(flag){
			for(int i=0;i<chessboadr[0].length;i++){
				int value=chessboadr[0][i];
				boolean compare=true;
					if(compare){
						for(int j=0;j<chessboadr.length;j++){
							if(value!=chessboadr[j][i]){
								compare=false;
							}
						}
					}
					if(compare){
						if(value==1){
							System.out.println("X");
						}
						if(value==0){
							System.out.println("O");
						}
						flag=false;
						break;
					}
			}
		}
		//比较正对角线
		if(flag){
			boolean compare=true;
			int value=chessboadr[0][0];
			if(compare){
				for(int i=1;i<chessboadr.length;i++){
					if(value!=chessboadr[i][i]){
						compare=false;
					}
				}
			}
			if(compare){
				if(value==1){
					System.out.println("X");
				}
				if(value==0){
					System.out.println("O");
				}
				flag=false;
			}
		}
		//比较反对角线
		if(flag){
			boolean compare=true;
			int value=chessboadr[chessboadr.length-1][chessboadr.length-1];
			if(compare){
				for(int i=chessboadr.length-2;i>=0;i--){
					if(value!=chessboadr[i][i]){
						compare=false;
					}
				}
			}
			if(compare){
				if(value==1){
					System.out.println("X");
				}
				if(value==0){
					System.out.println("O");
				}
				flag=false;
			}
		}
		//如果没有相等
		if(flag){
			System.out.println("NIR");
		}
	}
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入棋盘大小:");
		int size=sc.nextInt();
		System.out.println("请输入棋子状态:");
		if(check(size)){//调用check()方法。
			int [][]chessboard=new int[size][size];
			//将输入的数据保存到二维数组
			for(int i=0;i<chessboard.length;i++){
				for(int j=0;j<chessboard[i].length;j++){
					int input=sc.nextInt();
					if(checkNumber(input)){//检查输入的数字是否是0或1.
						chessboard[i][j]=input;
					}
					else{
						j--;
					}
				}
			}
			System.out.println("输出二维数组:");
			for(int[]a:chessboard){
				for(int b:a){
					System.out.print(b+",");
				}
				System.out.println();
			}
			match(chessboard);
		}
		
	}
}


©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页