Java找不到符号StdIn和StdOut
我有Java编译问题。虽然我已经正确地配置了我的类路径,如图所示Java找不到符号StdIn和StdOut,java,Java,我有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:~$ 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人来说,这不是一个困难的问题。javac introcs命令用于《计算机科学导论:跨学科方法》一书。命令javac-algs4与算法一书4e一起使用。前者使用默认包,因此不需要导入语句;后者使用命名包,需要导入语句。因此,在您的情况下,使用javac introcs,一切都应该正常工作
使用这两个命令时都不需要设置CLASSPATH环境变量。这可以通过将 这必须与安装目录匹配 LIFT_LIB=/usr/local/LIFT/LIB 导出类路径=${CLASSPATH}:${LIFT_LIB}/stdlib.jar:${LIFT_LIB}/introcs.jar:${LIFT_LIB}/algs4.jar
在我的.bashrc文件中。它不起作用的原因是,我没有在.bashrc中使用export命令。IMHO,这是对本课程的不公平批评。安装简化编程环境的说明将引导您完成这些步骤,并正确工作,至少在Linux部分是这样
似乎@Glassjawed未能使用安装lift时启用的javac introcs和java introcs命令。您可以像1999年一样工作,手动将JAR文件添加到类路径,或者您可以识别它是2019年,并使用Maven或Gradle等构建工具为您执行此操作。algs4震击器在储物箱托盘上提供
我学习了这门课程,并使用Gradle来构建代码。一旦您设置了项目,您就可以专注于解决真正的问题,而不是操纵类路径。我还发起了一项计划,以更好地组织algs4的源代码。由于历史原因,目前只有一个平面结构,但没有时间完成它。StdIn和StdOut不是标准类名。你需要给我们看代码。它们来自哪里?添加了代码-我不知道为什么代码应该很重要。我的观点是,StdOut和StdIn在我提供的stdlib.jar中,我添加到了类路径中。。。但我还是会出错!嗯,我没有看到StdIn的导入。当它已经在类路径中时,我需要导入吗?是的,只有java.lang中的类会自动导入。所有其他对象都必须具有显式导入。事实并非如此,如果类源文件位于同一个包中,并且位于同一个编译路径中,则不需要它。但是您有Jar文件,而不是源文件。听起来你好像是某个人项目的受害者,他们只是全部编译成一个程序。谢谢-这真的应该也包括在普林斯顿课程网页上。此外,我的项目文件夹有子目录.lift和.idea,其中相关的jars stdlib、algs4、introcs等在.lift/中。然而,在用java编译时,无论是通过IntelliJ还是命令行,它们都不会被接受。如果能在IntelliJ中看到如何实现这一点的图像,那就太好了……好吧,但事实仍然是,在向类路径添加文件而不是java-algs4时,可能需要使用java和javac。特别是在IntelliJ或Eclipse中构建时。同意。做事总是有多种方法的。您可以使用add类路径,可以在命令行上使用-cp,也可以使用javaintrocs。这三种方法都很好。