Java测试编程题

题目1

1.创建5个线程对象
线程名设置为(Thread01,Thread02,Thread03,Thread04,Thread05)使用 代码实现5个线程有序的循环打印,效果如下:
Thread01正在打印1
Thread02正在打印2
Thread03正在打印3
Thread04正在打印4
Thread05正在打印5
Thread01正在打印6
Thread02正在打印7

package Test;public class Test01 {public static void main(String[] args) {Object lock = new Object();int[] currentNum = {1}; // 记录当前应该打印的数字for (int i = 1; i <= 5; i++) {final int threadNum = i;new Thread(new Runnable() {@Overridepublic void run() {synchronized (lock) {try {for (int j = 0; j < 10; j++) {// 等待轮到自己打印while ((currentNum[0] - 1) % 5 != threadNum - 1) {lock.wait();}// 打印数字System.out.println("Thread" + threadNum + "正在打印" + currentNum[0]);currentNum[0]++;// 唤醒下一个线程lock.notifyAll();}} catch (InterruptedException e) {e.printStackTrace();}}}}).start();}// 开始第一个线程的执行synchronized (lock) {lock.notifyAll();}}
}

运行截图
在这里插入图片描述

题目二

package Test;import java.io.*;
import java.net.*;
import java.util.Scanner;public class Server {public static void main(String[] args) throws IOException{ServerSocket serverSocket = new ServerSocket(8080);Socket socket = serverSocket.accept();Scanner scan = new Scanner(System.in);Gobang gobang = new Gobang();  // 创建五子棋对象StatusCode statusCode = new StatusCode();  // 添加状态码BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF8"));PrintStream ps = new PrintStream(socket.getOutputStream());while (true){
//            ps.println("服务端:" + scan.next());System.out.println("请服务端输入落子位置:");int x = scan.nextInt() - 1;int y = scan.nextInt() - 1;// 落子if(gobang.play(x, y, true) != statusCode.successfulLanding) {continue;}
//            ps.println("服务端端落子:(" + x + "," + y + ")");ps.println(x + "," + y);String str = br.readLine();System.out.println(str);int client_x = Integer.parseInt(str.split(",")[0]);int client_y = Integer.parseInt(str.split(",")[1]);System.out.println("客户端x:" + client_x);System.out.println("客户端y:" + client_y);if(gobang.play(client_x , client_y, false) != statusCode.successfulLanding) {continue;}// 打印棋盘for (String[] ss : gobang.gobang) {for (String element : ss) {System.out.print(element);}System.out.println();}// 提升作业:判断输赢if(gobang.isWin(x, y)) {System.out.println("服务端胜利");break;}}}
}
package Test;
import java.io.*;
import java.net.*;
import java.util.Scanner;public class Client {public static void main(String[] args) throws IOException {Socket socket = new Socket("127.0.0.1", 8080);Scanner scan = new Scanner(System.in);BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF8"));PrintStream ps = new PrintStream(socket.getOutputStream());Gobang gobang = new Gobang();  // 创建五子棋对象StatusCode statusCode = new StatusCode();  // 添加状态码while(true){System.out.println("请客户端输入落子位置:");int x = scan.nextInt() - 1;int y = scan.nextInt() - 1;// 落子if(gobang.play(x, y, false) != statusCode.successfulLanding) {continue;}//            ps.println("客户端落子:(" + x + "," + y + ")");ps.println(x + "," + y);String str = br.readLine();System.out.println(str);int server_x = Integer.parseInt(str.split(",")[0]);int server_y = Integer.parseInt(str.split(",")[1]);System.out.println("服务端x:" + server_x);System.out.println("服务端y:" + server_y);if(gobang.play(server_x, server_y, true) != statusCode.successfulLanding) {continue;}// 打印棋盘for (String[] ss : gobang.gobang) {for (String element : ss) {System.out.print(element);}System.out.println();}if(gobang.isWin(x, y)) {System.out.println("客户端胜利");break;}}}
}
package Test;public class Gobang {/*** 五子棋类* */// 棋盘长度int len = 20;// 棋盘容器String[][] gobang = new String[len][len];// 棋盘的符号String add = "┼";// ┼String black = "●";String white = "○";String[] indexs = { "⒈", "⒉", "⒊", "⒋", "⒌", "⒍", "⒎", "⒏", "⒐", "⒑", "⒒", "⒓", "⒔", "⒕", "⒖", "⒗", "⒘", "⒙","⒚", "⒛" };public Gobang(){init();printGoBang();}// 初始化棋盘private void init() {for (int i = 0; i < gobang.length; i++) {for (int j = 0; j < gobang[i].length; j++) {if (j==len-1) {  // 每行的最后一列  设置 xx行gobang[i][j] = indexs[i] + "行";}else if(i==len-1){ // 每列的最后一行 设置 xx 列gobang[i][j] = indexs[j];}else {gobang[i][j] = add;}}}}// 打印棋盘private void printGoBang() {for (int i = 0; i < gobang.length; i++) {for (int j = 0; j < gobang[i].length; j++) {System.out.print(gobang[i][j]);}System.out.println();}}// 判断坐标是否在棋盘内private boolean isIndexOutOfGoBang(int x, int y) {if(x<0 || x>len-2 || y<0 || y>len-2){System.out.println("落子失败 - 坐标超出棋盘范围");return true;}return false;}// 判断坐标是否有棋子private boolean isPiece(int x, int y) {if(!gobang[x][y].equals(add)){return true;}return false;}// 落子public int play(int x, int y, boolean bool) {StatusCode statusCode = new StatusCode();// 判断坐标是否超出棋盘范围if (isIndexOutOfGoBang(x, y)) {System.out.println("落子失败 - 坐标超出棋盘范围");return statusCode.indexOutOfRange;}// 判断坐标上是否有棋子if (isPiece(x, y)) {System.out.println("落子失败 - 坐标上已有棋子");return statusCode.existingPieces;}gobang[x][y] = (bool) ? black : white;return statusCode.successfulLanding;}public boolean isWin(int x, int y) {if(upAndDown(x, y)|| leftAndRight(x, y)|| leftUpAndRightDown(x, y)|| leftDownAndRightUp(x, y)) {return true;}return false;}// 落子之后, 上下判断输赢private boolean upAndDown(int x, int y) {int count = 1;for (int i = x-1;i>=0;i--) {if (this.gobang[x][y]==this.gobang[i][y]) {count++;}else {break;}}for(int i=x+1;i<=this.len;i++) {if(this.gobang[x][y]==this.gobang[i][y]) {count++;}else {break;}}return (count>=5)?true:false;}// 落子之后, 左右判断输赢private boolean leftAndRight(int x, int y) {int count = 1;for (int i=y-1;i>=0;i--) {if(this.gobang[x][y]==this.gobang[x][i]) {count++;}else {break;}}for (int i=y+1;i<=this.len;i++) {if(this.gobang[x][y]==this.gobang[x][i]) {count++;}else {break;}}return (count>=5)?true:false;}// 落子之后, 左上右下判断输赢private boolean leftUpAndRightDown(int x, int y) {int count = 1;for (int i=y-1, j=x-1;i>=0&&j>=0;i--, j--) {if(this.gobang[x][y]==this.gobang[j][i]) {count++;}else {break;}}for (int i=y+1, j=x+1;i<=this.len&&j<=this.len;i++,j++) {if(this.gobang[x][y]==this.gobang[j][i]) {count++;}else {break;}}return (count>=5)?true:false;}// 落子之后, 左下右上判断输赢private boolean leftDownAndRightUp(int x, int y) {int count = 1;for (int i=y-1, j=x+1;i>=0&&j<=this.len;i--, j++) {if(this.gobang[x][y]==this.gobang[j][i]) {count++;}else {break;}}for (int i=y+1, j=x-1;i<=this.len&&j>=0;i++,j--) {if(this.gobang[x][y]==this.gobang[j][i]) {count++;}else {break;}}return (count>=5)?true:false;}
}
package Test;public class StatusCode {/*** 五子棋状态码* */int indexOutOfRange = -1;  // 超出棋盘范围int existingPieces = -2;	// 该位置已有棋子int successfulLanding = 1;  // 落子成功public int getIndexOutOfRange() {return this.indexOutOfRange;}public int getExistingPieces() {return this.existingPieces;}public int getSuccessfulLanding() {return this.successfulLanding;}
}

运行截图
在这里插入图片描述

存在bug

  1. 使用单聊模式为通信方式, 如果一方能正常落子, 一方错误输入已经落过子的坐标, 正常落子方会比错误落子方多落一子.
  2. 一方胜利之后, 另外一方的窗口不能结束.
  3. 双方第一次落子如果落在一处, 没有相应的处理逻辑.
  4. 落子双方没有先后顺序, 正常先后顺序应该为i黑先白后

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/636541.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信道的题目

调制信道分为恒参信道和随参信道。恒参信道举例&#xff1a;各种有线信道&#xff1b;中长波地波传播、卫星中继。随参信道举例&#xff1a;短波电离层反射信道、各种散射信道、移动通信信道。狭义信道分为有线信道和无线信道。广义信道包含调制信道和编码信道。调制信道中不包…

Three.js--》探秘虚拟现实VR展厅的视觉盛宴

今天简单实现一个three.js的小Demo&#xff0c;加强自己对three知识的掌握与学习&#xff0c;只有在项目中才能灵活将所学知识运用起来&#xff0c;话不多说直接开始。 目录 项目搭建 初始化three代码 camera-controls控制器使用 添加画框 画框处理事件 添加机器人模型 …

强化网络安全防线,您的等级保护措施到位了吗?

在这个信息化飞速发展的时代&#xff0c;网络安全已经成为我们每个人都需要关注的问题。无论是企业还是个人&#xff0c;我们的工作和生活都越来越依赖于网络。确保网络环境的安全&#xff0c;防止信息泄露和网络攻击&#xff0c;已经成为了一项至关重要的任务。等级保护制度作…

Spring-dataSource事务案例分析-使用事务嵌套时,一个我们容易忽略的地方

场景如下&#xff1a; A_Bean 中的方法a()中调用B_Bean的b();方法都开启了事务&#xff0c;使用的默认的事务传递机制&#xff08;即&#xff1a;属于同一事务&#xff09;&#xff1b; 如下两种场景会存在较大的差异&#xff1a; 在b()方法中出现了异常&#xff0c;在b()中进…

手把手学浪视频怎么保存到本地

很多人在学浪app上面购买了课程,但是并不是所有课程都是永久观看,所以就想要下载下来,进行永久观看 由于很多人都是小白用户,考虑到这一点,我封装成软件,大家不需要考虑视频m3u8地址是怎么获取的、KEY是怎么解密的,只需要掌握工具怎么用 工具我也给大家准备好了,有需要的自己…

java算法day3

移除链表元素设计链表翻转链表两两交换链表中的结点 移除链表元素 ps&#xff1a;有时候感觉到底要不要写特判&#xff0c;你想到了就写&#xff01;因为一般特判有一劳永逸的作用。 解法有两种&#xff0c;一种是不用虚拟头结点&#xff0c;另一种就是用虚拟头结点。 这里我…

【基础IO】谈谈动静态库(怒肝7000字)

文章目录 前言实验代码样例静态库生成一个静态库归档工具ar静态库的链接 动态库创建动态库加载动态库 动静态链接静态链接动态链接动静态链接的优缺点 前言 在软件开发中&#xff0c;库&#xff08;Library&#xff09;是一种方式&#xff0c;可以将代码打包成可重用的格式&…

014Node.js时间格式包silly-datetime安装与使用

下载&#xff1a; https://www.npmjs.com/网站上下载silly-datetime 安装 npm i silly-datetime --save var sd require(silly-datetime);console.log(new Date()); //2024-04-18T04:40:38.505Zvar dsd.format(new Date(), YYYY-MM-DD HH:mm);console.log(d); //2024…

【1569】jsp学生学籍管理系统Myeclipse开发sqlserver数据库web结构jsp编程计算机网页项目

一、源码特点 jsp 学生学籍管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为sqlserver2…

李廉洋:4.20国际黄金,原油本周行情分析及下周一走势分析。

荷兰国际银行表示&#xff0c;所谓的美国国债期限溢价的回升&#xff0c;将为10年期国债收益率重返5%的关键水平铺平道路。从理论上来说&#xff0c;可将10年期美债收益率拆解为未来短端利率的期望期限溢价(term premium)。所谓期限溢价&#xff0c;是对投资者持有长期债券的风…

《机器学习by周志华》学习笔记-线性模型-02

1、对数几率回归 1.1、背景 上一节我们考虑了线性模型的回归学习,但是想要做分类任务就需要用到上文中的广义线性模型。 当联系函数连续且充分光滑,考虑单调可微函数,令: 1.2、概念 找一个单调可谓函数,将分类任务的真实标记与线性回归模型的预测值联系起来,也叫做「…

【php开发工程师系统性教学】——Laravel框架(验证码)的配置和使用的保姆式教程

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…