Java 在IntelliJ中使用CHelper插件进行编码竞赛
我最近发现了一个带有编码竞赛的编码站点:,为了解决这些问题,我们只需要将它们交给一个带有main的文件(在下面的示例中,类Java 在IntelliJ中使用CHelper插件进行编码竞赛,java,eclipse,intellij-idea,Java,Eclipse,Intellij Idea,我最近发现了一个带有编码竞赛的编码站点:,为了解决这些问题,我们只需要将它们交给一个带有main的文件(在下面的示例中,类播放器),如果需要其他类,我们将它们包含在这个文件中 为此,我下载了intelliJ和,以便将所有源文件放在一个java文件中(这应该是CHelper插件的目的)。问题是:我不知道如何为我的编码站点使用/设置这个插件。我知道它应该可以工作,因为这个网站的另一个用户已经为此使用了这个插件 我想要什么 关于我想要的更详细的示例,下面是一个带有main的类: // Class Pl
播放器
),如果需要其他类,我们将它们包含在这个文件中
为此,我下载了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-工具栏按钮 要添加到菜单工具栏的重要按钮有
- 创建新任务
- 修改任务
- 删除任务
- 编辑项目设置
编辑项目设置
:
- 将默认目录设置为默认包
- 输出目录用于生成的源文件
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
,将该类标记为独立于它的封闭类,会容易得多。这确保了封闭类的实例独立于它所包含的类的实例。例如,代码中的类单元格
将以静态
作为前缀。这个插件实际上是用于“正确”编码的。我希望能够在不同的文件中分离类(每个类都是不同的文件),并使用此工具将它们合并到一个文件中。我知道我应该在合并的代码中为类单元格
添加一个静态
,实际上我在我的实际玩家类中有它(手动完成)。我有