java
您现在所在的位置:首页>企业动态>java

我是如何实现 Java LeetCode功能的

编辑:学到牛牛IT培训    发布日期: 2022-03-16 10:05:15  

首先我们要明白一件事情,Java 是如何编译运行的 。

我们编写的 Java 代码本质上是一堆字符串 .java。

接着被编译成字节码文件 .class

接下来我们就有了思路。

生成 .java 文件

生成字节码文件

运行字节码文件截取结果

截取耗费时间,正确答案。

1. 生成 .java 文件

 public void sendFile(String tiContext, String uuid) {

        String path = Config.TiUrl;

        File file = new File(path);

        if (!file.exists()) {

            file.mkdirs();

        }

        String context = "import java.util.*;" +

                "public class Test" + uuid + " {" +

                tiContext +

                "}";

        try {

            BufferedWriter bw = new BufferedWriter(new FileWriter(Config.TiUrl + "Test" + uuid + ".java"));

            bw.write(context);

            bw.close();

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

对的 使用 Java UUID 生成唯一的 Java 类

使用 提前准备好的 模板

把用户提交的信息提交进去

紧接着使用 IO 流生成一个 Java 文件

那么现在 用户提交的 .java 文件已经生成了

2. 生成字节码文件

现在来编译一下

    /**

     * 编辑java文件

     *

     * @return

     */

    public int compile(String uuid) {

        try {

//            Runtime run = Runtime.getRuntime();

//            Process process = run.exec("javac " + "D:/java/ti/" + className + "/" + username + "/" + "Test" + topicId + ".java");

//            process.waitFor();

//            process.destroy();

            Runtime run = Runtime.getRuntime();

            System.out.println("javac " + Config.TiUrl + "Test" + uuid + ".java");

            Process process = run.exec("javac " + Config.TiUrl + "Test" + uuid + ".java");

            process.waitFor();

            process.destroy();

        } catch (Exception e) {

            throw new MyException(e.getMessage());

        }

        return 1;

    }

我们调用 javac 编译 生成好的 java 文件

我们收获了 相对应的字节码文件。

3. 运行字节码文件

 public Map check(String topicId, String uuid) {

        boolean flog = false;

        try {

            // 加载这个文件夹下所有的class文件

            File file = new File(Config.TiUrl);

            URL[] uris = {file.toURI().toURL()};

            URLClassLoader loader = URLClassLoader.newInstance(uris);

            //获取指定类的字节码文件

            Class<?> demo1Claz = loader.loadClass("Test" + uuid);

            Object o = demo1Claz.newInstance();

            ByteArrayOutputStream baoStream = new ByteArrayOutputStream(1024);

            PrintStream cacheStream = new PrintStream(baoStream);

            PrintStream oldStream = System.out;

            System.setOut(cacheStream);//不打印到控制台

            SpeckTime.start();

            switch (topicId) {

                case "1":

                    //运行class文件

                    Method add = demo1Claz.getMethod("add", Integer.class, Integer.class);

                    int res = (int) add.invoke(o, 456, 151);

                    if (res == 607) {

                        flog = true;

                    }

                    break;

                case "20":

                    Method getMax = demo1Claz.getMethod("getMax", int[].class);

                    res = (int) getMax.invoke(o, new int[]{1, 2, 3, 4, 999});

                    if (res == 999) {

                        flog = true;

                    }

                case "21":

                    Method shuixianhua = demo1Claz.getMethod("shuixianhua");

                    shuixianhua.invoke(o);

                    String strMsg = baoStream.toString();

                    System.setOut(oldStream);

                    if (strMsg.equals("153"+System.getProperty("line.separator")+"370371"+System.getProperty("line.separator")+"407"+System.getProperty("line.separator"))) {

                        flog = true;

                    }

                    break;

                case "22":

                    Method getCountOfStr = demo1Claz.getMethod("getCountOfStr", String.class, String.class);

                    int c = (int) getCountOfStr.invoke(o, "ccooeeqqcc", "c");

                    if (c == 4) {

                        flog = true;

                    }

                    break;

                case "23":

                    Method getDa = demo1Claz.getMethod("getDa", int.class, int.class);

                    res = (int) getDa.invoke(o, 9, 5);

                    System.out.println(res);

                    if (res == 9) {

                        flog = true;

                    }

                    break;

                case "24":

                    Method printZhiShu = demo1Claz.getMethod("printZhiShu");

                    printZhiShu.invoke(o);

                    strMsg = baoStream.toString();

                    System.setOut(oldStream);

                    if (strMsg.equals("2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 ")) {

                        flog = true;

                    }

                    break;

                case "25": {

                    Method getMax1 = demo1Claz.getMethod("getMax", int[][].class);

                    int a[][] = {{1, 3, 4}, {2, 1, 5}, {6, 3, 2}};

                    res = (int) getMax1.invoke(o, (Object) a);

                    if (res == 6) {

                        flog = true;

                    }

                }

                break;

                case "26": {

                    Method getMaxYue = demo1Claz.getMethod("getMaxYue", int.class, int.class);

                    res = (int) getMaxYue.invoke(o, 4, 6);

                    int res2 = (int) getMaxYue.invoke(o, 3, 9);

                    if (res == 2 && res2 == 3) {

                        flog = true;

                    }

                }

                break;

                case "27": {

                    Method huiWen = demo1Claz.getMethod("huiWen", String.class);

                    boolean res27 = (boolean) huiWen.invoke(o, "aba");

                    boolean res2 = (boolean) huiWen.invoke(o, "pgoagnkagak");

                    if (res27 && !res2) {

                        flog = true;

                    }

                }

                break;

                case "28": {

                    Method trimSpace = demo1Claz.getMethod("trimSpace", String.class);

                    if ("acfted".equals((String) trimSpace.invoke(o, " a c f t e d"))

                            && "4485375".equals((String) trimSpace.invoke(o, "4 4 85 3 7 5"))) {

                        flog = true;

                    }

                }

                break;

                case "29":

                    Method jiujiu = demo1Claz.getMethod("jiujiu");

                    jiujiu.invoke(o);

                    String strMsg29 = baoStream.toString();

                    System.setOut(oldStream);

                    String a = "1*1=1 " +

                            "1*2=2 2*2=4 " +

                            "1*3=3 2*3=6 3*3=9 " +

                            "1*4=4 2*4=8 3*4=12 4*4=16 " +

                            "1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 " +

                            "1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 " +

                            "1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 " +

                            "1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 " +

                            "1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 ";

                    System.out.println(strMsg29);

                    System.out.println();

                    System.out.println(a);

                    if (strMsg29.equals(a)) {

                        flog = true;

                    }

                    break;

                case "30":

                    Method aaa = demo1Claz.getMethod("aaa", int.class);

                    aaa.invoke(o, 5);

                    strMsg = baoStream.toString();

                    System.setOut(oldStream);

                    a = "1, " +

                            "1,1, " +

                            "1,2,1, " +

                            "1,3,3,1, " +

                            "1,4,6,4,1, ";

                    System.out.println(strMsg);

                    System.out.println();

                    System.out.println(a);

                    if (strMsg.equals(a)) {

                        flog = true;

                    }

                    break;

                case "31": {

                    Method lifanggen = demo1Claz.getMethod("lifanggen", double.class);

                    double res27 = (double) lifanggen.invoke(o, 27);

                    double res271 = (double) lifanggen.invoke(o, 125);

                    if (res27 == 3.0 && res271 == 5.0) {

                        flog = true;

                    }

                }

                break;

                default:

                    break;

            }

        } catch (Exception e) {

            flog = false;

        }

        Map end = SpeckTime.end();

        end.put("flog", flog);

        return end;

    }

根据 反射机制调用相对应的 方法 进行答案判断

最后我们判断结果把返回即可。

代码范式,不要喷,我当时只是为了完成作业

前端编辑器:

Ace editor 在线网页版的 vscode! 代码编辑器 | Vue.js 技术论坛 (learnku.com)

免费试学
课程好不好,不如实地听一听

封闭学习

2

1

联系我们

电话:028-61775817

邮箱:1572396657@qq.com

地址:成都市金牛区西城国际A座8楼

  • java_java学习教程_java最新资讯-学到牛牛
    java_java学习教程_java最新资讯-学到牛牛

    扫一扫,免费咨询

  • java_java学习教程_java最新资讯-学到牛牛
    java_java学习教程_java最新资讯-学到牛牛

    微信公众号

  • java_java学习教程_java最新资讯-学到牛牛
java_java学习教程_java最新资讯-学到牛牛

学一流技术,找高薪工作

java_java学习教程_java最新资讯-学到牛牛

7-24小时服务热线:

028-61775817

版权声明 网站地图

蜀ICP备2021001672号

课程问题轻松问