我是第一次加入 Hackerrank 。仅出于一些练习目的。 然后,我找到了这一行
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));
并对"OUTPUT_PATH"
的正确替代品感到困惑。因为代码已复制到我的IDE(Eclipse)中,所以我阅读了文档,但没有保留值适合。他们都扔了NPE。
在我的情况下,System.getenv("..")
的正确参数值是什么?
如果您需要完整的代码:
import java.io.*;
import java.math.*;
import java.text.*;
import java.util.*;
import java.util.regex.*;
import javax.swing.JOptionPane;
public class Solution {
/*
* Complete the simpleArraySum function below.
*/
static int simpleArraySum(int[] ar) {
return 2;
}
private static final Scanner scanner = new Scanner(System.in);
public static void main(String[] args) throws IOException {
//name − This is the name of the environment variable.
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));
int arCount = Integer.parseInt(scanner.nextLine().trim());
int[] ar = new int[arCount];
String[] arItems = scanner.nextLine().split(" ");
for (int arItr = 0; arItr < arCount; arItr++) {
int arItem = Integer.parseInt(arItems[arItr].trim());
ar[arItr] = arItem;
}
int result = simpleArraySum(ar);
bufferedWriter.write(String.valueOf(result));
bufferedWriter.newLine();
bufferedWriter.close();
}
}
答案 0 :(得分:2)
正如我在评论中所说,您不应替换它。这是外壳程序中用于运行解决方案的环境变量。
看到变量值传递给FileWriter
,这意味着它代表文件名。
您可以通过使用以下命令运行程序在终端中复制它:
env OUTPUT_PATH=/path/to/some/file java Solution
这将启动一个新的shell,其中包含一个名为OUTPUT_PATH
的变量,该变量指向名为/path/to/some/file
的文件,并且在程序启动时将使用文件名
答案 1 :(得分:2)
表示“ OUTPUT_PATH”是环境变量。您必须在操作系统中声明该变量才能使用它。通常,像hackerrank这样的网站都这样做,因为我猜想学习那里系统的路径不利于安全。您可以在IDE中测试代码,但是环境变量不在您需要声明的位置。希望它对您的困惑有所帮助。
答案 2 :(得分:2)
在Eclipse中,您可以设置环境变量,如下所示:
答案 3 :(得分:1)
我知道这个问题有点老了,但是也许有人会从这个答案中受益...
此行:
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));
读取在Hackerrank运行时/测试环境中定义的环境变量,以确定将存储结果以进行进一步分析的位置。
为了使用完全相同的代码,您必须在系统上创建并使用此变量,或者更改以将结果存储在不同的位置(如先前的答案和注释中已经解释过的那样)。
但是,...
由于这是用于Hackerrank解决方案的,所以我认为最好将所有输出重定向到system.out而不是文件,因为在IDE控制台中查看运行时(或调试)的结果要有用得多,而不是而不是将其放置在文件中。
因此,最好以这种方式更改此行:
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));
这会将您的BufferedReader流式传输到System.out。
在这种情况下,您将获得与Hackerrank测试用例相同的输出,但是在您的IDE控制台中,而不是在文件中。
答案 4 :(得分:1)