java数组练习题

java数组练习题,第1张

1.数独 将从1到9的数字放入一个3×3的数组中,判断数组每行每列以及每个对角线的值相加是否都相同


public class NineGrids {
	public static void main(String[] args) {
		int arr[][] = { { 2, 7, 6 }, { 9, 5, 1 }, { 4, 3, 8 } };

		boolean result = true;
		int sum = arr[0][0] + arr[1][1] + arr[2][2];// 计算一条斜边和
		if (sum != arr[0][2] + arr[1][1] + arr[2][0]) {
			result = false;

		} else {
			for (int x = 0; x < 3; x++) {
				// 计算行、列的和
				if (sum != arr[x][0] + arr[x][1] + arr[x][2] || sum != arr[0][x] + arr[1][x] + arr[2][x]) {
					result = false;
					break;
				}
			}
		}

		if (result) {
			System.out.println("数组行、列、对角线的和相等");
		} else {
			System.out.println("数组行、列、对角线的和不相等");
		}
	}
}

2.矩阵转置 交换二维数组“int[][] array = {undefined{ 91,25,8 }, { 56,14,2 }, { 47,3,67 }};”的行、列数据。


public class SwapRC {// 交换二维数组的行列数据
	public static void main(String[] args) {
		int i, j;// 定义两个变量,分别用来作为行和列的循环变量
		// 初始化一个静态的int型二维数组
		int[][] array = { { 8, 75, 23 }, { 21, 55, 34 }, { 15, 23, 20 } };
		System.out.println("—————原始数组—————");// 提示信息
		// 遍历原始的二维数组
		for (i = 0; i < 3; i++) {
			for (j = 0; j < 3; j++) {
				System.out.print(array[i][j] + "\t");// 输出原始数组中的元素
			}
			System.out.println();// 换行
		}
		int temp;// 临时变量
		// 通过循环调换元素的位置
		for (i = 0; i < 3; i++) {
			for (j = 0; j < i; j++) {
				temp = array[i][j];// 把数组元素赋给临时变量
				// 交换行列数据
				array[i][j] = array[j][i];
				array[j][i] = temp;
			}
		}
		System.out.println("——调换位置之后的数组——");// 提示信息
		// 遍历调换位置之后的二维数组
		for (i = 0; i < 3; i++) {
			for (j = 0; j < 3; j++) {
				System.out.print(array[i][j] + "\t");// 输出调换位置后的数组元素
			}
			System.out.println();// 换行
		}
	}
}

3.杨辉三角 使用二维数组实现如图所示的杨辉三角

1    
1    1    
1    2    1    
1    3    3    1    
1    4    6    4    1    
1    5    10    10    5    1    
1    6    15    20    15    6    1    
1    7    21    35    35    21    7    1    
1    8    28    56    70    56    28    8    1    
1    9    36    84    126    126    84    36    9    1    


public class YangHui {// 杨辉三角算法的实现
	public static void main(String[] args) {
		// 定义一个长度为10的二维数组
		int[][] Array_int = new int[10][];
		// 向数组中记录杨辉三角形的值
		for (int i = 0; i < Array_int.length; i++) {// 遍历行数
			Array_int[i] = new int[i + 1];// 定义二维数组的列数
			// 遍历二维数组的列数
			for (int j = 0; j < Array_int[i].length; j++) {
				if (i <= 1) {// 如果是数组的前两行
					Array_int[i][j] = 1;// 将其设置为1
					continue;
				} else {
					// 如果是行首或行尾
					if (j == 0 | j == Array_int[i].length - 1)
						Array_int[i][j] = 1;// 将其设置为1
					else// 根据杨辉算法进行计算
						Array_int[i][j] = Array_int[i - 1][j - 1] + Array_int[i - 1][j];
				}
			}
		}
		for (int i = 0; i < Array_int.length; i++) {// 输出杨辉三角
			for (int j = 0; j < Array_int[i].length; j++)
				System.out.print(Array_int[i][j] + "\t");
			System.out.println();
		}
	}
}

 

4. 推箱子游戏 编写一个简易的推箱子游戏,使用10*8的二维字符数据表示游戏画面,H表示墙壁;&表示玩家角色;o表示箱子,*表示目的地。玩家可以通过输入A,D,W,S字符控制角色移动,当箱子推到目的地时显示游戏结束。

import java.util.Scanner;

public class Sokoban {

    public static void main(String[] args) {
        char map[][] = new char[8][10];// 地图
        Scanner sc = new Scanner(System.in);// 控制台输入扫描器
        int x = 1, y = 1;// 玩家角色坐标
        boolean finish = false;// 游戏是否结束

        for (int i = 0; i < map.length; i++) {// 地图外边墙壁
            if (i == 0 || i == 7) {
                for (int j = 0; j < map[i].length; j++) {
                    map[i][j] = 'H';
                }
            } else {
                map[i][0] = 'H';
                map[i][9] = 'H';
            }
        }
        map[1][3] = 'H';// 地图内墙壁
        map[2][3] = 'H';
        map[3][3] = 'H';
        map[2][5] = 'H';
        map[3][5] = 'H';
        map[3][6] = 'H';
        map[3][8] = 'H';
        map[4][8] = 'H';
        map[6][4] = 'H';
        map[5][4] = 'H';
        map[5][5] = 'H';
        map[5][6] = 'H';
        map[x][y] = '&';// 玩家角色
        map[2][2] = 'o';// 箱子
        map[6][5] = '*';// 目的地

        while (true) {// 循环游戏
            /* 打印游戏画面 */
            System.out.println("--------------------");
            for (char row[] : map) {
                for (char column : row) {
                    System.out.print(column + " ");
                }
                System.out.println();
            }
            System.out.println("--------------------");

            if (finish) {// 如果游戏结束则停止循环
                break;
            }

            System.out.println("A左移,D右移,W上移,S下移,请输入你的指令:");
            String code = sc.nextLine();// 获取玩家输入的指令

            switch (code.toLowerCase()) {// 将执行转为小写并判断
                case "a" :// 如果输入的是a
                    if (map[x][y - 1] == 0) {// 如果玩家左边是空区
                        map[x][y] = 0;// 原位置变为空区
                        map[x][y - 1] = '&';// 玩家移动到新位置
                        y--;// 玩家坐标左移
                    } else if (map[x][y - 1] == 'o') {// 如果玩家左边是箱子
                        if (map[x][y - 2] != 'H') {// 如果箱子左边不是墙
                            if (map[x][y - 2] == '*') {// 如果箱子左边是目的地
                                finish = true;// 游戏结束
                            }
                            map[x][y] = 0;// 原位置变为空区
                            map[x][y - 1] = '&';// 玩家移动到新位置
                            map[x][y - 2] = 'o';// 箱子移动到新位置
                            y--;// 玩家位置左移
                        }
                    }
                    break;// 结束判断
                case "d" :// 如果输入的是d
                    if (map[x][y + 1] == 0) {// 如果玩家右边是空区
                        map[x][y] = 0;// 原位置变为空区
                        map[x][y + 1] = '&';// 玩家移动到新位置
                        y++;// 玩家坐标右移
                    } else if (map[x][y + 1] == 'o') {// 如果玩家右边是箱子
                        if (map[x][y + 2] != 'H') {// 如果箱子右边不是墙
                            if (map[x][y + 2] == '*') {// 如果箱子右边是目的地
                                finish = true;// 游戏结束
                            }
                            map[x][y] = 0;// 原位置变为空区
                            map[x][y + 1] = '&';// 玩家移动到新位置
                            map[x][y + 2] = 'o';// 箱子移动到新位置
                            y++;// 玩家坐标右移
                        }
                    }
                    break;// 结束判断
                case "w" :// 如果输入的是w
                    if (map[x - 1][y] == 0) {// 如果玩家上方是空区
                        map[x][y] = 0;// 原位置变为空区
                        map[x - 1][y] = '&';// 玩家移动到新位置
                        x--;// 玩家坐标上移
                    } else if (map[x - 1][y] == 'o') {// 如果玩家上方是箱子
                        if (map[x - 2][y] != 'H') {// 如果箱子上方不是墙
                            if (map[x - 2][y] == '*') {// 如果箱子上方是目的地
                                finish = true;// 游戏结束
                            }
                            map[x][y] = 0;// 原位置变为空区
                            map[x - 1][y] = '&';// 玩家移动到新位置
                            map[x - 2][y] = 'o';// 箱子移动到新位置
                            x--;// 玩家坐标上移
                        }
                    }
                    break;// 结束判断
                case "s" :// 如果输入的是s
                    if (map[x + 1][y] == 0) {// 如果玩家下方是空区
                        map[x][y] = 0;// 原位置变为空区
                        map[x + 1][y] = '&';// 玩家移动到新位置
                        x++;// 玩家坐标下移
                    } else if (map[x + 1][y] == 'o') {// 如果玩家下方是箱子
                        if (map[x + 2][y] != 'H') {// 如果箱子下方不是墙
                            if (map[x + 2][y] == '*') {// 如果箱子下方是目的地
                                finish = true;// 游戏结束
                            }
                            map[x][y] = 0;// 原位置变为空区
                            map[x + 1][y] = '&';// 玩家移动到新位置
                            map[x + 2][y] = 'o';// 箱子移动到新位置
                            x++;// 玩家坐标下移
                        }
                    }
                    break;// 结束判断
                default :// 如果输入的是其他指令
                    System.out.println("您输入的指令有误!");
            }

        }
        System.out.println("游戏结束");
        sc.close();
    }

}

5.首先,要做一个五子棋游戏,我们要列出流程是什么:我们需要创建一个棋盘,这里我用了二维数组来创建棋盘创建好了以后,就可以在棋盘上下棋了,所以,第二步开始游戏,黑白双方开始下棋。在每一步棋下完以后进行判断,是否有五个棋子连一起。如果某一方胜利,询问用户是否继续比赛。

import java.util.Arrays;
import java.util.Scanner;

/**
 * 简易五子棋
 *
 */
public class Gobang {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        boolean finish = false; // 游戏是否结束
        int turn = 1; // 当前下棋者标记,1则PLAYER1下棋,-1则PLAYER2下棋
        int x = 0, y = 0; // 当前棋子的横纵坐标
        final char PLAYER1 = '*';// 玩家1使用的字符
        final char PLAYER2 = 'o';// 玩家2使用的字符
        final char EMPTY = '-';// 空棋盘使用的字符

        /* 棋盘初始化 */
        char checkerboard[][] = new char[10][10];
        for (int i = 0; i < checkerboard.length; i++) {
            Arrays.fill(checkerboard[i], EMPTY);
        }

        game : while (!finish) {
            /* 打印棋盘 */
            System.out.println("---------------------");
            System.out.println("  0 1 2 3 4 5 6 7 8 9");
            for (int i = 0; i < checkerboard.length; i++) {
                System.out.print(i + " ");
                for (int j = 0; j < checkerboard[i].length; j++) {
                    System.out.print(checkerboard[i][j] + " ");
                }
                System.out.println();
            }
            System.out.println("---------------------");

            /* 判断当前下棋者 */
            if (turn == 1) {
                System.out.println("请" + PLAYER1 + "输入棋子坐标:");
            } else {
                System.out.println("请" + PLAYER2 + "输入棋子坐标:");
            }

            /* 输入棋子坐标 */
            String str = sc.nextLine();

            x = Integer.parseInt(String.valueOf(str.charAt(0)));
            y = Integer.parseInt(String.valueOf(str.charAt(1)));

            /* 判断坐标是否在棋盘之内 */
            if (x < 0 || x > 8 || y < 0 || y > 8) {
                System.out.println("***您输入的坐标有误请重新输入!***");
                continue;
            }

            /* 判断坐标上是否有棋子 */
            if (checkerboard[x][y] == EMPTY) {
                if (turn == 1) {
                    checkerboard[x][y] = PLAYER1;
                } else {
                    checkerboard[x][y] = PLAYER2;
                }
            } else {
                System.out.println("***您输入位置已经有其他棋子,请重新选择!***");
                continue;
            }

            /* 五子棋输赢算法那*/
            for (int i = 0; i < checkerboard.length; i++) {
                for (int j = 0; j < checkerboard[i].length; j++) {
                    char flagch = checkerboard[i][j];
                    if (flagch == EMPTY) {// 如果此处没有棋子
                        continue;// 不进行输赢判断
                    }
                    /* 判断棋子左侧 */
                    if (y - 4 >= 0) {
                        if (checkerboard[i][j - 1] == flagch
                                && checkerboard[i][j - 2] == flagch
                                && checkerboard[i][j - 3] == flagch
                                && checkerboard[i][j - 4] == flagch) {
                            finish = true;
                            break game;
                        }
                    }

                    /* 判断棋子右侧 */
                    if (y + 4 <= 9) {
                        if (checkerboard[i][j + 1] == flagch
                                && checkerboard[i][j + 2] == flagch
                                && checkerboard[i][j + 3] == flagch
                                && checkerboard[i][j + 4] == flagch) {
                            finish = true;
                            break game;
                        }
                    }
                    /* 判断棋子上方 */
                    if (x - 4 >= 0) {
                        if (checkerboard[i - 1][j] == flagch
                                && checkerboard[i - 2][j] == flagch
                                && checkerboard[i - 3][j] == flagch
                                && checkerboard[i - 4][j] == flagch) {
                            finish = true;
                            break game;
                        }
                    }
                    /* 判断棋子下方 */
                    if (x + 4 <= 9) {
                        if (checkerboard[i + 1][j] == flagch
                                && checkerboard[i + 2][j] == flagch
                                && checkerboard[i + 3][j] == flagch
                                && checkerboard[i + 4][j] == flagch) {
                            finish = true;
                            break game;
                        }
                    }
                    /* 判断棋子西北 */
                    if (x - 4 >= 0 && y - 4 >= 0) {
                        if (checkerboard[i - 1][j - 1] == flagch
                                && checkerboard[i - 2][j - 2] == flagch
                                && checkerboard[i - 3][j - 3] == flagch
                                && checkerboard[i - 4][j - 4] == flagch) {
                            finish = true;
                            break game;
                        }
                    }
                    /* 判断棋子西南 */
                    if (x + 4 <= 9 && y - 4 >= 0) {
                        if (checkerboard[i + 1][j - 1] == flagch
                                && checkerboard[i + 2][j - 2] == flagch
                                && checkerboard[i + 3][j - 3] == flagch
                                && checkerboard[i + 4][j - 4] == flagch) {
                            finish = true;
                            break game;
                        }
                    }
                    /* 判断棋子东北 */
                    if (x - 4 >= 0 && y + 4 <= 9) {
                        if (checkerboard[i - 1][j + 1] == flagch
                                && checkerboard[i - 2][j + 2] == flagch
                                && checkerboard[i - 3][j + 3] == flagch
                                && checkerboard[i - 4][j + 4] == flagch) {
                            finish = true;
                            break game;
                        }
                    }
                    /* 判断棋子东南 */
                    if (x + 4 <= 9 && y + 4 <= 9) {
                        if (checkerboard[i + 1][j + 1] == flagch
                                && checkerboard[i + 2][j + 2] == flagch
                                && checkerboard[i + 3][j + 3] == flagch
                                && checkerboard[i + 4][j + 4] == flagch) {
                            finish = true;
                            break game;
                        }
                    }
                }
            }
            turn *= -1; // 更换下棋者标记
        }

        /* 输出最后胜利的棋盘 */
        System.out.println("---------------------");
        System.out.println("  0 1 2 3 4 5 6 7 8 9");
        for (int i = 0; i < checkerboard.length; i++) {
            System.out.print(i + " ");
            for (int j = 0; j < checkerboard[i].length; j++) {
                System.out.print(checkerboard[i][j] + " ");
            }
            System.out.println();
        }
        System.out.println("---------------------");
        /* 输出赢家 */
        if (turn == 1) {
            System.out.println("*棋胜利!");
        } else {
            System.out.println("o棋胜利!");
        }
        sc.close();
    }
}

6.统计学生成绩 输入学生的学号及语文、数学、英语成绩,输出学生各科成绩信息、平均成绩和总成绩。

import java.util.Scanner;

public class SchoolReport {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入本班学生总数:");
		int studentcout = sc.nextInt();
		int achivement[][] = new int[studentcout][4];
		for (int i = 0; i < studentcout; i++) {
			System.out.println("请输入第" + (i + 1) + "个学生的编号:");
			achivement[i][0] = sc.nextInt();
			System.out.println("请输入语文成绩:");
			achivement[i][1] = sc.nextInt();
			System.out.println("请输入数学成绩:");
			achivement[i][2] = sc.nextInt();
			System.out.println("请输入英语成绩:");
			achivement[i][3] = sc.nextInt();
		}
		System.out.println("学生成绩结果如下");
		System.out.println("---------------------------------------------");
		System.out.println("学生编号\t语文成绩\t数学成绩\t英语成绩\t平均成绩\t总成绩");

		for (int i = 0; i < achivement.length; i++) {
			double sum = 0;	//总成绩
			double ave = 0;	//平均成绩
			for (int j = 0; j < achivement[i].length; j++) {
				System.out.print(achivement[i][j] + "\t");
				if (j > 0) {
					sum += achivement[i][j];
				}
			}
			ave = sum / 3;
			System.out.print(String.format("%.2f", ave) + "\t" + (int) sum
					+ "\n");
		}
	}
}

7.制作一个简单的客车售票系统,假设客车的座位数是9行4列,使用一个二维数组记录客车售票系统中的所有座位号,1代表有票,0代表无票。程序运行结果如下所示

import java.util.Scanner;
public class Ticket {// 客车售票系统
	public static void main(String[] args) {
		int zuo[][] = new int[9][4];// 定义二维数组
		for (int i = 0; i < 9; i++) {// for循环开始
			for (int j = 0; j < 4; j++) {// for循环开始
				zuo[i][j] = 1;// 初始化二维数组
			}
		}
		while (true) {// 开始售票
			// 输出标题
			System.out.println("            简单客车售票系统" + "\n  9排4列的大巴车开始售票");
			for (int i = 0; i < 9; i++) {
				for (int j = 0; j < 4; j++) {
					System.out.print(zuo[i][j] + "\t");// 输出售票信息
				}
				System.out.println();// 输出换行符
			}
			// 创建扫描器,用来进行用户输入
			Scanner sc = new Scanner(System.in);
			// 提示用户输入信息
			System.out.print("请输入要预定的坐位行号:");
			int row = sc.nextInt();// 得到坐位行数
			// 提示用户输入信息
			System.out.print("请输入要预定的坐位列号:");
			int column = sc.nextInt();// 得到坐位列数
			zuo[row - 1][column - 1] = 0;// 标记售出票状态
		}
	}
}

8.实现自动批卷程序 现有学号为1~8的8名学生和10道题目,将学生的答案存储一个二维数组中,通过学号找到并输入该学生的答案以及回答正确的题目总数。

import java.util.Scanner;
public class Answers {// 创建Scores类
	public static void main(String[] args) {
		// 初始化String类型的一维数组(设为题目的标准答案)
		char right[] = { 'B', 'A', 'D', 'C', 'C', 'B', 'C', 'A', 'D', 'B' };
		// 初始化String类型的二维数组(记录8名学生的答案)
		char choice[][] = {
				{ 'B', 'A', 'D', 'C', 'A', 'B', 'C', 'C', 'D', 'B' },
				{ 'B', 'A', 'D', 'B', 'A', 'B', 'C', 'A', 'C', 'B' },
				{ 'A', 'A', 'D', 'C', 'B', 'A', 'C', 'A', 'D', 'B' },
				{ 'B', 'C', 'D', 'C', 'A', 'B', 'C', 'B', 'D', 'A' },
				{ 'B', 'C', 'D', 'A', 'C', 'B', 'D', 'A', 'D', 'A' },
				{ 'B', 'A', 'D', 'A', 'C', 'B', 'D', 'A', 'C', 'B' },
				{ 'A', 'B', 'A', 'C', 'D', 'B', 'C', 'A', 'D', 'B' },
				{ 'B', 'A', 'D', 'C', 'D', 'B', 'A', 'C', 'D', 'B' }};
		while (true) {// 实现多次控制台输入信息
			System.out.println("您想调取第几位学生的答题结果"
							 + "(有效数字为1至8):");// 提示信息
			Scanner sc = new Scanner(System.in);// 控制台输入
			int num = sc.nextInt();// 接收控制台输入的信息
			int sum = 0;// 声明int类型的全局变量sum(答对的题目总数)
			System.out.println("第" + num + "位同学的全部答案为:");// 提示信息
			for (int j = 0; j < choice[num - 1].length; j++) {
				System.out.print(choice[num - 1][j] + " ");// 输出数组的元素
				// 判断键入的信息是否为正确答案
				if (choice[num - 1][j] == right[j]) {
					sum++;// 答对的题目总数
				}
			}
			System.out.println();// 换行
			// 控制台输出答对的题目总数
			System.out.println("第" + num + "位同学一共答对了" + sum 
							 + "道题" + "\n");
		}
	}
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/728794.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存