首页 > 解决方案 > Java 找不到符号 StdIn 和 StdOut

问题描述

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

标签: java

解决方案


您可以像 1999 年一样工作并手动将 JAR 文件添加到类路径,或者您可以识别它是 2019 年,并使用 Maven 或 Gradle 等构建工具为您完成此操作。JAR在algs4BinTray 上可用。https://github.com/kevin-wayne/algs4/blob/master/README.md

我参加了这门课程并使用 Gradle 来构建代码。设置项目后,您可以专注于解决实际问题,而不是操纵类路径。我还发起了一项旨在更好地组织源代码的计划algs4(由于历史原因,目前是一个扁平结构),但没有时间完成它。


推荐阅读