我有Java编译问题。虽然我已经正确配置了我的类路径,如图所示.
yan@Y9Acer:~$ echo $CLASSPATH
.:/usr/local/lift/lib/stdlib.jar:/usr/local/lift/lib/introcs.jar:/usr/local/lift/lib/algs4.jar在构建符号时,我仍然会得到下面的StdIn和StdOut错误,表示没有找到符号。但是这些都可以在上面列出的stdlib.jar文件中找到,所以我不知道为什么会发生这种情况。有人知道这是为什么吗?我找了好几个小时却一无所获。
yan@Y9Acer:~$ javac-algs4 coursera/java-stuff/markov/Markov.java
coursera/java-stuff/markov/Markov.java:17: error: cannot find symbol
int n = StdIn.readInt(); // number of pages
^
symbol: variable StdIn
location: class Markov
coursera/java-stuff/markov/Markov.java:18: error: cannot find symbol
StdIn.readInt(); // ignore integer required by input format
^
symbol: variable StdIn
location: class Markov
coursera/java-stuff/markov/Markov.java:26: error: cannot find symbol
p[i][j] = StdIn.readDouble();
^
symbol: variable StdIn
location: class Markov
coursera/java-stuff/markov/Markov.java:47: error: cannot find symbol
StdOut.printf("%8.5f", rank[i]);
^
symbol: variable StdOut
location: class Markov
coursera/java-stuff/markov/Markov.java:49: error: cannot find symbol
StdOut.println();
^
symbol: variable StdOut
location: class Markov
coursera/java-stuff/markov/Markov.java:51: error: cannot find symbol
StdOut.println();
^
symbol: variable StdOut
location: class Markov
coursera/java-stuff/markov/Markov.java:54: error: cannot find symbol
StdOut.printf("%2d %5.3f\n", i, rank[i]);
^
symbol: variable StdOut
location: class Markov
7 errors这是我的代码,你可以看到
import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdOut;
public class Markov {
public static void main(String[] args) {
int trials = Integer.parseInt(args[0]); // number of iterations
int n = StdIn.readInt(); // number of pages
StdIn.readInt(); // ignore integer required by input format
// Read p[][] from StdIn.
double[][] p
= new double[n][n]; // p[i][j] = prob. surfer moves from page i to page j
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
p[i][j] = StdIn.readDouble();
// Use the power method to compute page ranks.
double[] rank = new double[n];
rank[0] = 1.0;
for (int t = 0; t < trials; t++) {
// Compute effect of next move on page ranks.
double[] newRank = new double[n];
for (int j = 0; j < n; j++) {
// New rank of page j is dot product of old ranks and column j of p[][].
for (int k = 0; k < n; k++)
newRank[j] += rank[k] * p[k][j];
}
// Update page ranks.
rank = newRank;
}
// print page ranks
for (int i = 0; i < n; i++) {
StdOut.printf("%8.5f", rank[i]);
}
StdOut.println();
StdOut.println();
// print page ranks
for (int i = 0; i < n; i++) {
StdOut.printf("%2d %5.3f\n", i, rank[i]);
}
}
}有没有人?对于一个有经验的Java人来说,我不认为这是一个困难的问题。
发布于 2019-05-11 18:32:37
您可以像1999年那样工作,并将JAR文件手动添加到类路径中,或者您可以识别它是2019年,并使用Maven或Gradle这样的构建工具来帮助您。algs4 JAR可在BinTray上使用。https://github.com/kevin-wayne/algs4/blob/master/README.md。
我上过这门课,用Gradle来构建代码。一旦您设置了项目,您就可以专注于解决真正的问题,而不是操作类路径。我还发起了一项计划,以更好地组织algs4的源代码(由于历史原因,目前只有一个平面结构),但没有时间完成它。
发布于 2019-05-10 09:29:45
javac-introcs命令用于编写“计算机科学入门:跨学科方法”一书。命令javac-algs4 4适用于图书算法,4e。前者使用默认包,因此不需要import语句;后者使用的是命名包和import语句。因此,在您的例子中,使用javac-introcs,一切都会正常工作。
在使用这两个命令时,不需要设置CLASSPATH环境变量。
发布于 2019-05-10 09:39:25
这是通过
# this must match the install directory LIFT_LIB="/usr/local/lift/lib"
export CLASSPATH="${CLASSPATH}:${LIFT_LIB}/stdlib.jar:${LIFT_LIB}/introcs.jar:${LIFT_LIB}/algs4.jar"在我的.bashrc文件中。它不能工作的原因是因为我没有在.bashrc中使用.bashrc命令。
https://stackoverflow.com/questions/56070802
复制相似问题