Java 在IntelliJ中使用CHelper插件进行编码竞赛

Java 在IntelliJ中使用CHelper插件进行编码竞赛,java,eclipse,intellij-idea,Java,Eclipse,Intellij Idea,我最近发现了一个带有编码竞赛的编码站点:,为了解决这些问题,我们只需要将它们交给一个带有main的文件(在下面的示例中,类播放器),如果需要其他类,我们将它们包含在这个文件中 为此,我下载了intelliJ和,以便将所有源文件放在一个java文件中(这应该是CHelper插件的目的)。问题是:我不知道如何为我的编码站点使用/设置这个插件。我知道它应该可以工作,因为这个网站的另一个用户已经为此使用了这个插件 我想要什么 关于我想要的更详细的示例,下面是一个带有main的类: // Class Pl

我最近发现了一个带有编码竞赛的编码站点:,为了解决这些问题,我们只需要将它们交给一个带有main的文件(在下面的示例中,类
播放器
),如果需要其他类,我们将它们包含在这个文件中

为此,我下载了intelliJ和,以便将所有源文件放在一个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());
    }
}
该类单元格位于另一个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的工具栏菜单按钮(这个插件是专门为这个站点设计的),但是启动TopCoder按钮抛出了一个运行时异常:无法运行程序…/javaws没有这样的文件。 通过从TopCoder下载一些任务,我成功地将两个文件合并为一个:TaskA.java到Main.java(下载模板)

什么是理想的
如果一个Eclipse插件可以像我想要的那样工作,我会很高兴知道它。事实上,这正是我在搜索之初所寻找的,我只找到了IntelliJ IDE的一些插件。

所以我终于找到了一种方法来做我想做的事情:做过它的人给了我一个我需要的插件

我将在这里专门总结一下

I-工具栏按钮 要添加到菜单工具栏的重要按钮有

  • 创建新任务
  • 修改任务
  • 删除任务
  • 编辑项目设置
现在,红色矩形中有一些按钮:

II-编辑设置 然后我们必须
编辑项目设置

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

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

现在,我们的软件包中出现了两个文件
../puzzle

  • CGXFormatter.java
    使用方法
    solve
    ,我们将在这里读取输入并在输出中给出答案
  • CGXFormatter.task
    ,其中包含测试用例等信息,以便插件生成源文件
写下你的解决方案 例如,我们将在
CGXFormatter
类中打印“这是结果”(但是我们可以创建另一个类文件并调用它,它可以通过复制生成的解决方案类中的类定义来工作)。像这样:

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-生成解决方案 最后一步:点击run。然后,我们创建了目录
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….
类,您可以添加我找到的这些步骤

将Intellij IDEA更新至最新版本。其次,您进入
文件
->设置…->插件
并搜索chelper插件。它是运行任务运行配置所必需的,并为您提供 工具栏上的按钮也是如此。在你做了那件事之后,你应该 正在获取无法从中查找和加载类的错误 net.egork。。。现在你进入jetbrains插件网站,搜索 chelper插件,并下载最新的zip存档。之后 解压后,进入
文件->项目结构…->库->+->
Java
,递归选择刚刚解压缩的文件夹,直到到达 一堆jar,其中包含错误中缺少的类。之后 您已经将这些JAR与JDK一起添加到类路径中,它应该 够了



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

如果您还没有创建使用此插件的项目,简单地在
关键字前面加上
static
,将该类标记为独立于它的封闭类,会容易得多。这确保了封闭类的实例独立于它所包含的类的实例。例如,代码中的类
单元格
将以
静态
作为前缀。这个插件实际上是用于“正确”编码的。我希望能够在不同的文件中分离类(每个类都是不同的文件),并使用此工具将它们合并到一个文件中。我知道我应该在合并的代码中为类
单元格
添加一个
静态
,实际上我在我的实际玩家类中有它(手动完成)。我有