【问题标题】:Using CHelper plugin in IntelliJ for a coding contest在 IntelliJ 中使用 CHelper 插件进行编码竞赛
【发布时间】:2016-11-24 07:51:03
【问题描述】:

我最近发现了一个编码网站,有编码竞赛:CodinGame,为了解决问题,我们必须只将它们交给一个带有 main 的文件(在以下示例中,类 Player ),如果需要其他类,我们将它们包含在此文件中。

为了这个目的(并且看起来是为another coding site工作),我已经下载了intelliJ和plugin CHelper,以便将所有源文件放入一个java文件中(这应该是CHelper的目的插入)。问题是:我不明白如何为我的编码站点使用/设置这个插件。我知道它应该可以工作,因为该站点的另一个用户已经为此目的使用了该插件。

我想要什么

对于我想要的更详细的示例,这里是带有 main 的类:

// Class Player in file Player.java
public class Player {
    public static void main(String[] args) {
        System.out.println(new Cell(1,2).toString());
    }
}

而且这个类 Cell 在另一个 java 文件中:

// Class Cell in file Cell.java
public class Cell {
    int x,y;
    public Cell(int x, int y) {
        this.x = x;
        this.y = y;
    }
    public String toString() {
        return "["+x+","+y+"]";
    }
}

并且我希望插件合并两个(或更多)java文件以便拥有这个:

// Generated : 2 files merged into one file: Player.java
public class Player {
    public static void main(String[] args) {
        System.out.println(new Cell(1,2).toString());
    }

    // Class Cell merged in this file
    public class Cell {
        int x,y;
        public Cell(int x, int y) {
            this.x = x;
            this.y = y;
        }
        public String toString() {
            return "["+x+","+y+"]";
        }
    }
}

我的成就

我正确安装了 IntelliJ,并下载了 CHelper 插件。 我安装了链接到 TopCoder 的工具栏菜单按钮(该插件专门用于该站点),但是 Launch TopCoder 按钮抛出 RuntimeException : cannot run program .../javaws no such file。 通过从 TopCoder 下载一些任务,我成功地将 2 个文件合并为一个:TaskA.java 到 Main.java(已下载模板)

什么是理想的

如果 Eclipse 插件可以像我想要的那样工作,我会很高兴知道它。事实上,这就是我在搜索开始时要寻找的东西,我只找到了一些 IntelliJ IDE 的插件。

【问题讨论】:

  • 如果您还没有创建使用此插件的项目,只需在 class 关键字前面加上 static 就容易多了,将这个类标记为独立于它的封闭类.这确保了封闭类的实例独立于它所包含的类的实例。例如,您的代码中的类 Cell 将以 static 为前缀。
  • 嗯,这个插件真的是为了“正确”编码。我希望能够将不同文件中的类分开(每个类一个不同的文件),然后用这个工具将它们合并到一个文件中。我知道我应该在合并的代码中为类Cell 放置一个static,实际上我在我的实际 Player 类中拥有它(手动完成)。我在Player 类中有类似 7 个内部类的层次结构,这就是为什么我想将它们分开(不那么脏的代码),而且我希望能够轻松地测试它们。

标签: java eclipse intellij-idea


【解决方案1】:

所以我终于找到了一种方法来做我想做的事:做这件事的人分享了我需要的link to the help

我这里专门针对CodinGame总结一下。

I- 工具栏按钮

添加到菜单工具栏的重要按钮是

  • 创建新任务
  • 修改任务
  • 删除任务
  • 编辑项目设置

现在,我们在红色矩形中有一些按钮:

II- 编辑设置

那我们要edit project settings

  • 将默认目录设置为您的默认包
  • 输出目录用于生成的源文件

III- 创建任务

接下来,我们必须创建一个新任务(绿色“+”按钮)并使用advanced 选项进行设置。我们使用按钮Edit tests 添加测试输入和已知输出。我们说我们希望生成的文件被称为Solution.java,我们要编写的类将被称为CGXFormatter.java

我们现在有两个文件出现在我们的包.../puzzle 中:

  • CGXFormatter.javasolve 方法,我们将在其中读取输入并在输出中给出答案
  • CGXFormatter.task,包含测试用例等信息,以便插件生成源文件

IV- 写出你的解决方案

例如,我们将在 CGXFormatter 类中打印“This is the result”(但我们可以创建另一个类文件并调用它,它可以通过复制生成的解决方案类)。像这样:

package com......puzzle;

import java.util.Scanner;
import java.io.PrintWriter;

public class CGXFormatter {
    public void solve(int testNumber, Scanner in, PrintWriter out) {
        out.println("This is the result");
    }
}

V- 生成解决方案

最后一步:点击运行。然后我们创建了generated 目录,在其中我们有新生成的Solution.java 文件。我们可以阅读:

import java.io.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Scanner;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 *
 * @author XXX
 */
public class Solution {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        Scanner in = new Scanner(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        CGXFormatter solver = new CGXFormatter();
        try {
            int testNumber = 1;
            while (true)
                solver.solve(testNumber++, in, out);
        } catch (UnknownError e) {
            out.close();
        }
    }

    static class CGXFormatter {
        public void solve(int testNumber, Scanner in, PrintWriter out) {
            out.println("This is the result");
        }

    }
}

VI- 最后一步

好的,还有一个小问题:在 CodinGame 中,解决方案类前面不应该有public,所以只需将class Solution 替换为public class Solution,就完成了。 如果你愿意,你也可以把它放在一个脚本中,通过 multirun 自动执行(也可以在 IDEA 中安装插件)。

就是这样,你完成了。

VII- 2019 年 10 月编辑

如果插件抱怨找不到net.egork.... 类,您可以添加我找到here 的这些步骤

将 Intellij IDEA 更新到最新版本。其次,您转到File -> Settings... -> Plugins 并搜索 chelper 插件。它是运行任务运行配置所必需的,它为您提供 工具栏上的按钮也是如此。完成之后,你应该 收到有关无法从中找到和加载类的错误 net.egork... 现在你去 jetbrains 插件网站,搜索 chelper 插件,并下载最新的 zip 存档。后 解压它,转到File -> Project Structure... -> Libraries -> + -> Java,递归选择你刚刚解压的文件夹,直到你到达 一堆包含错误中缺少的类的罐子。后 您已将这些 jar 与 JDK 一起添加到您的类路径中,它应该 够了


作为旁注,我注意到 out.println 没有按我的预期工作(我不知道为什么),所以我将其替换为 System.out.println 而不是使用在solve 方法中提出out 对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多