管道java程序中的错误
我有一个类RandomSeq,它打印“args[0]”随机双精度,还有一个类Average,它打印StdIn的平均值。我正在使用DrJava编写代码和编译。我已经下载了StdIn和out库,并将它们放在我的类的同一文件夹中。我在学Java 第一个问题是DrJava的“交互”部分。当我编写管道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
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解决了这个问题。非常感谢;)