Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
管道java程序中的错误_Java_Piping_Drjava - Fatal编程技术网

管道java程序中的错误

管道java程序中的错误,java,piping,drjava,Java,Piping,Drjava,我有一个类RandomSeq,它打印“args[0]”随机双精度,还有一个类Average,它打印StdIn的平均值。我正在使用DrJava编写代码和编译。我已经下载了StdIn和out库,并将它们放在我的类的同一文件夹中。我在学Java 第一个问题是DrJava的“交互”部分。当我编写java RandomSeq 10>data.txt而不是创建文本文件时,它会打印输出。为什么? 然后我在Windows命令行中键入了相同的命令。它成功地创建了txt文件 现在我想通过管道将RandomSeq 1

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

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

现在我想通过管道将RandomSeq 10的输出传输到Average的输入。编写
java随机序列10 | java平均值
在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
也会显示相同的错误。为什么

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);
    }
}
公共类随机序列
{
公共静态void main(字符串[]args)
{
int N=Integer.parseInt(args[0]);
对于(int i=0;i
StdIn
不是来自内置Java库。它是第三方库的一部分,包含在可从下载的
stdlib.jar
文件中

JAR
文件的路径必须位于命令行
javac
java
调用的
-CLASSPATH
选项中。的使用标准库部分介绍了如何执行此操作;
-cp
选项只是
-CLASSPATH
的简写。学习如何将库放入
类路径
,这一点很重要,因为最终您将一直使用Java来实现这一点

您的
Average.java
代码还必须导入
StdIn
类。由于
StdIn
不驻留在命名包中,您只需说
import StdIn位于代码顶部

或者,您可以只使用
中的
系统,而不使用此库。您可能还需要一个更高级别的流构造

这是一个问题
StdIn
不是标准的java库,正如您提到的,您正在学习普林斯顿课程,
StdIn.java
是课程提供的,您可能还需要编译
StdIn.java
,使用命令
javac StdIn.java
生成
StdIn.class
文件,这将解决
类未找到异常
。(第二期)

至于您在DrJava中编写
java RandomSeq 10>data.txt
(我要求澄清,因为我没有意识到DrJava是一个IDE,我认为它是一本书),是因为
交互
部分最有可能直接向您的程序提供输入,这意味着它将您在其中键入的任何内容作为
参数传递[]
用于
主功能

输出是打印的,因为您在代码中调用了
system.out.println
,而DrJava只是将该输出输出打印到屏幕上,而不会通过管道传输到
data.txt
文件。我建议您使用课程材料,因为它需要管道之类的东西在命令行中与程序交互


最后,
java-RandomSeq 10 | java-Average
与执行
java-RandomSeq 10
相同,然后将该输出放入
java-Average
,第二个命令与执行
java-Average
相同,错误不是因为您如何进行管道传输,而是因为
StdIn
而不是b作为一个编译的
.class
文件出现。

StdIn的完全限定名是什么?它在你的类路径上吗?“当我写java RandomSeq 10>data.txt而不是创建文本文件时”-你在哪里写这个?:)@和yturner我是java新手。你说的“完全限定名”是什么意思关于StdIn?我已经从这里下载了:@AndyTurner,正如我所说,StdIn和StdOut在我的classes@matrixanomaly我在我的帖子中提到过:在DrjavaManager的“交互”部分,但在下面的“连接两个程序”链接中第:,没有提到这些先决条件:-|没问题。我只是浓缩了我的答案供将来使用。它将使您能够使用
StdIn
,而无需编译。编译StdIn.java和StdOut.java解决了这个问题。非常感谢;)