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");
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)