我有一个类RandomSeq打印“args [0]”随机双打和一个打印平均StdIn的类。我正在使用DrJava编写代码和编译。我已经下载了StdIn和out库并将它们放在我的类的同一个文件夹中。我正在学习Java。
第一个问题出现在DrJava的“交互”部分。当我写DELETE FROM hotspot, laptop WHERE hotspot.user_id= '2EA81' and laptop.id= hotspot.hotspot_ID
而不是创建文本文件时,它会打印输出。为什么呢?
然后我在Windows命令行中键入了相同的命令。它成功创建了txt文件。
现在我想将RandomSeq 10的输出传递给Average的输入。写java RandomSeq 10 > data.txt
在DrJava的Interactions部分会导致有趣的行为。在cmd中编写它会打印以下错误:
java RandomSeq 10 | java Average
即使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
答案 0 :(得分:2)
StdIn
不是来自内置的Java库。它是包含在stdlib.jar
文件中的第三方库的一部分,可以从here下载。
该JAR
文件的路径必须位于命令行-CLASSPATH
和javac
调用的java
选项中。 this page的使用标准库部分向您展示了如何执行此操作; -cp
选项只是-CLASSPATH
的简写。学习如何将库放到CLASSPATH
上是非常重要的,因为您最终会使用Java一直这样做。
您的Average.java
代码还必须import
StdIn
课程。由于StdIn
不在命名包中,因此您只需在代码顶部说import StdIn;
。
或者,您可以使用System.in
,而不是此库。您可能还需要更高级别的流构造。 Here's a nice example
答案 1 :(得分:1)
这是related question on 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
。
打印输出是因为您在代码中调用data.txt
,而DrJava只接受该输出并将其打印到屏幕上,并且不会传输到您的java RandomSeq 10 | java Average
文件。我建议您使用课程材料,这需要管道之类的东西在命令行中与您的程序进行交互。
最后java RandomSeq 10
与执行java Average
相同,然后将该输出转换为java Average < data.txt
,第二个命令与您StdIn
相同,错误是因为你如何管道它,只是因为.class
没有作为编译的TableViewController
文件出现。