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

时间:2016-07-20 22:40:49

标签: java eclipse intellij-idea

我最近发现了一个带有编码竞赛的编码网站:CodinGame,为了解决这些问题,我们必须将它们只用一个带有main的文件(在下面的例子中,类{ {1}}),如果需要其他类,我们将它们包含在此文件中。

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

我想要什么

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

Player

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

// 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+"]";
    }
}

我取得的成就

我正确安装了IntelliJ,并下载了CHelper插件。 我安装了链接到TopCoder的工具栏菜单按钮(这个插件明确制作的网站),但启动TopCoder按钮抛出RuntimeException:无法运行程序... / javaws没有这样的文件。 通过从TopCoder下载的一些任务,我成功地将两个文件合并为一个:TaskA.java到Main.java中(下载了模板)

什么是理想的

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

1 个答案:

答案 0 :(得分:8)

所以我终于找到了一种方法来做我想做的事:那个做过它的人和我分享了我需要的link to the help

我将在这里专门为CodinGame总结一下。

I-工具栏按钮

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

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

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

II-编辑设置

然后我们必须edit project settings

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

Editing project settings

III-创建任务

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

Creating a new task

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

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

IV-编写解决方案

例如,我们打算打印#34;这是结果"在我们的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-生成解决方案

最后一步:点击运行。然后我们创建了目录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而你&#39 ;重做。 如果你愿意,你也可以把它放在一个脚本中,用multirun自动完成(也可以在IDEA中安装插件)。

那就是你,你已经完成了。

作为附注,我评论out.println并没有像我预期的那样工作(我不知道为什么),所以我将其替换为{ {1}}而不是在System.out.println方法中使用建议的out对象。