Java找不到符号StdIn和StdOut

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文件中找到,所以我不知道为什么会发生这种情况。有人知道这是为什么

我有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人来说,这不是一个困难的问题。

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。这三种方法都很好。