一个简单的单线程OJ判题端(java实现)
来源:互联网 发布:mac系统怎么剪切文件 编辑:程序博客网 时间:2024/06/01 08:53
前言
最近准备用java做一个OJ的判题端,现在的想法还是不太成熟,实现的也十分简单,贴出来希望能和大家一同交流~
实现的大体思路
首先,前台的用户将代码提交后,假设将代码保存在服务器中。那么,判题端应该如何去做呢?(1)判题端根据提交文件的类型,用不同的编译器去进行编译;(2)服务器启动线程去执行编译后的文件;(3)根据执行结果将结果写回数据库。
实现的简单功能
这里我主要实现了启动一个线程去执行编译后的java文件。(1)在执行前将标准的输入重定向到1.in(测试输入数据);(2)然后,通过反射生成Class对象并执行它的main方法;
遇到的坑
关于执行测试数据的问题? 因为测试数据有多组,所以就有两种处理方式: (1)提交的代码要求循环输入; (2)将提交的代码执行多次 *如果这样处理的话,那么,每组测试数据需要单独的放在一个文件中,因为重定向的文件中的数据会被当成一次输入。。
代码实现
package com.oj;import java.io.FileInputStream;import java.lang.reflect.Method;/** * Created by leeezm on 17-7-18. */public class Main implements Runnable{ @Override public void run() { try { FileInputStream fis=new FileInputStream("1.in文件的路径"); //将1.in作为标准输入 System.setIn(fis); //后面参数的类名必须为全限定类名(添加完整包名) Class clazz = Class.forName("com.oj.Test"); //获取main方法 Method mainMethod = clazz.getMethod("main", String[].class); //第一个参数是执行该方法的主调,后面是执行该方法时传入的实参 mainMethod.invoke(null, (Object) new String[] { "" }); fis.close(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args){ Main main=new Main(); new Thread(main).start(); }}
package com.oj;import java.util.Scanner;/** * Created by leeezm on 17-7-18. */public class Test { public static void main(String[] args){ //提交的代码,循环进行输入 Scanner scan=new Scanner(System.in); while(scan.hasNext()) { int a = scan.nextInt(); int b = scan.nextInt(); System.out.println(a + b); } }}
阅读全文
0 0
- 一个简单的单线程OJ判题端(java实现)
- Java实现一个简单的线程池
- 一个简单的java线程池实现
- 一个简单的线程池实现(java版)
- 一个简单的线程池实现(java版)
- 一个简单的线程池实现(java版)
- 一个简单的线程池实现(java版)
- 一个简单的线程池实现(java版)
- Android实现一个简单的单选题
- 【从0到1学习Java线程池】一个Java线程池的简单实现
- Java-单线程实现图片的下载
- java 实现单线程的聊天室
- java socket编程实现简单聊天室功能 单线程执行
- 一个线程池的简单的实现
- 一个简单的线程池的实现
- 一个简单的线程池的实现
- java线程池学习(二) —— 实现一个简单的线程池
- 一个简单线程类的实现
- think in java第九章接口 总结随笔
- 升级win10 系统后80 端口被占用 问题排查、解决
- win10+anaconda+pycharm使用tensorflow
- Matlab作图之全框坐标轴
- 常用控件2
- 一个简单的单线程OJ判题端(java实现)
- 从零构建一个灰度发布环境(二)系统配置
- JAVA二进制详解
- 开源必会运维体系
- HTTP请求响应码对应问题
- 段子 —— 电影台词
- C语言创建单向链表之正向建链
- SPOJ DQUERY 练习赛 (主席树数组模板)
- codevs2173忠诚(st表)