java 基础编程练习3
题目描述:
KiKi和BoBo玩 “井”字棋。也就是在九宫格中,只要任意行、列,或者任意对角线上面出现三个连续相同的棋子,就能获胜。请根据棋盘状态,判断当前输赢。
输入描述:
三行三列的字符元素,代表棋盘状态,字符元素用空格分开,代表当前棋盘,其中元素为K代表KiKi玩家的棋子,为O表示没有棋子,为B代表BoBo玩家的棋子。
输出描述:
如果KiKi获胜,输出“KiKi wins!”;
如果BoBo获胜,输出“BoBo wins!”;
如果没有获胜,输出“No winner!”。
示例1
输入:
K O B
O K B
B O K
输出:
KiKi wins!
import java.util.Scanner;
public class HelloWorld {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
//读入井字棋
String [][] tic = new String [3][3];
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
tic[i][j]=in.next();
}
}
boolean kwin=kikiwin(tic);
boolean bwin=bobowin(tic);
if(kwin==true){
System.out.println("KiKi wins!");
}
else if (bwin==true){
System.out.println("BoBo wins!");
}
else if(kwin==true && bwin==true){
System.out.println("No winner!");
}
else {
System.out.println("No winner!");
}
}
static boolean kikiwin(String [][] rec){
boolean kwin=false;
int sum=0;
//一行一行遍历,若发现有三个K,则KIKI赢
for(int i=0;i<3;i++) {
for (int j = 0; j < 3; j++) {
if (rec[i][j].equals("K")) {
sum++;
}
}
if (sum == 3) {
kwin = true;
break;
}
sum=0;
}
//一列一列遍历,若发现有三个K,则KIKI赢
sum=0;
for(int j=0;j<3;j++){
for(int i=0;i<3;i++){
if(rec[i][j].equals("K")){
sum++;
}
}
if(sum==3){
kwin=true;
break;
}
sum=0;
}
//主对角线都是K
if(rec[0][0].equals("K") && rec[1][1].equals("K") && rec[2][2].equals("K")){
kwin=true;
}
//次对角线都是K
if(rec[0][2].equals("K") && rec[1][1].equals("K") && rec[2][0].equals("K")){
kwin=true;
}
return kwin;
}
//与KIKI赢的方式一样,只不过他的棋子是B
static boolean bobowin(String [][] rec){
int sum=0;
boolean bwin=false;
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
if(rec[i][j].equals("B")){
sum++;
}
}
if(sum==3){
bwin=true;
break;
}
sum=0;
}
sum=0;
for(int j=0;j<3;j++){
for(int i=0;i<3;i++){
if(rec[i][j].equals("B")){
sum++;
}
}
if(sum==3){
bwin=true;
break;
}
sum=0;
}
if(rec[0][0].equals("B") && rec[1][1].equals("B") && rec[2][2].equals("B")){
bwin=true;
}
if(rec[0][2].equals("B") && rec[1][1].equals("B") && rec[2][0].equals("B")){
bwin=true;
}
return bwin;
}
}