3

我有一个 RandomSeq 类,它打印“args [0]”随机双精度数和一个平均类,它打印 StdIn 的平均值。我正在使用 DrJava 编写代码和编译。我已经下载了 StdIn 和 out 库并将它们放在我的类的同一个文件夹中。我正在学习Java。

第一个问题在 DrJava 的“交互”部分。当我编写java RandomSeq 10 > data.txt而不是创建文本文件时,它会打印输出。为什么?
然后我在 Windows 命令行中输入了相同的命令。它成功创建了txt文件。

现在我想将 RandomSeq 10 的输出通过管道传输到 Average 的输入。写java RandomSeq 10 | java Average 在 DrJava 的交互部分会导致有趣的行为。在 cmd 中写入会打印以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: StdIn
        at Average.main(Average.java:7)
Caused by: java.lang.ClassNotFoundException: StdIn
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 1 more

甚至java Average < data.txt显示相同的错误。为什么?

public class RandomSeq
{
    public static void main(String[] args)
    {
        int N = Integer.parseInt(args[0]);
        for (int i = 0; i < N; i++)
        {
            System.out.println(Math.random());
        }
    }
}




public class Average
{
    public static void main(String [] args)
    {
        double S = 0;
        int i = 0;
        while (!StdIn.isEmpty())
        {
            double n = StdIn.readDouble();
            S += n;
            i++;
        }
        S = S/i;
        //StdOut.printf("The mean is %.3f", S);
        StdOut.println(S);
    }
}
4

2 回答 2

2

StdIn不是来自内置的 Java 库。它是第 3 方库的一部分,包含在stdlib.jar可以从此处下载的文件中。

JAR文件的路径必须在-CLASSPATH命令行javacjava调用的选项中。本页使用标准库部分向您展示了如何执行此操作;该选项只是. 学习如何将库放到您的 .-cp-CLASSPATHCLASSPATH

您的Average.java代码也必须importStdIn类。由于StdIn不驻留在命名包中,因此您只需import StdIn;在代码顶部说。

或者,您可以只使用 System.in, 而不是这个库。您可能还需要一个更高级别的流结构。 这是一个很好的例子

于 2015-06-23T16:00:39.337 回答
1

这是关于 StdIn 的相关问题StdIn不是标准的 java 库,正如您提到的,您正在学习该StdIn.java课程提供的普林斯顿课程,您可能还需要编译StdIn.java,使用javac StdIn.java生成StdIn.class文件的命令,这将解决Class not Found Exception. (第二期)

至于你用 DrJava 编写的问题java RandomSeq 10 > data.txt(我要求澄清,因为我没有意识到 DrJava 是一个 IDE,以为它是一本书),是因为该Interactions部分很可能直接将输入提供给你的程序,这意味着它通过无论您在其中输入什么args[]功能main

打印输出是因为您调用system.out.println了代码,而 DrJava 只是获取该输出并将其打印到屏幕上,而不是通过管道传输到您的data.txt文件。我建议您这样做,因为您使用的课​​程材料需要管道​​等内容才能在命令行中与您的程序进行交互。

最后java RandomSeq 10 | java Average与做java RandomSeq 10然后将输出输入java Average相同,第二个命令与你做的相同java Average < data.txt,错误不是因为你如何管道它,而是因为StdIn没有作为编译.class文件存在。

于 2015-06-23T16:06:49.140 回答