我有一本算法书并将代码复制到我的eclipse或使用javac
编译的windows cmd,In
,StdIn
,StdOut
未解析。我看到我已将JAVA_HOME
设置为我的jdk目录C:\Program Files (x86)\Java\jdk1.7.0
。有什么问题?
import java.util.Arrays;
public class BinarySearch {
public static int rank(int key, int[] a)
{
int lo = 0;
int hi = a.length - 1;
while(lo <= hi)
{
int mid = lo + (hi - lo) / 2;
if(key < a[mid]) hi = mid - 1;
else if(key > a[mid]) lo = mid + 1;
else return mid;
}
return -1;
}
public static void main(String[] args)
{
int[] whitelist = **In**.readInts(args[0]);
Arrays.sort(whitelist);
while(!**StdIn**.isEmpty())
{
int key = **StdIn**.readInt();
if(rank(key, whitelist) == -1)
**StdOut**.println(key);
}
}
}
粗体类(此处用** **括起来)未解析。
答案 0 :(得分:3)
至少有一些Java编程教科书不能让你使用标准的Java,而是使用它们自己的类,因为对于初学者来说这应该是“更容易”的。其中之一是R. Sedgewick和K. Wayne的“Java编程简介”,另一个是Garside和Mariani的“Java:First Contact”。
您需要在类路径中下载并放置自定义类;如果有任何好处,应该在教科书中描述如何做到这一点。
有时这是在实验室计算机上为您完成的,但您必须自己在自己的计算机上完成。
答案 1 :(得分:-1)
称为Stdin和StdOut的流被称为
System.in
和
System.out
分别在Java中。
乍一看,你似乎错过了班上的这两行:
static InputStream StdIn = System.in;
static PrintStream StdOut = System.out;
但请注意,在Java中,命名约定指定使用基于camelCased的变量名称,以非大写字母开头。所以应该是这样的:
static InputStream stdIn = System.in;
static PrintStream stdOut = System.out;
(不要忘记更改方法中的变量引用...)
但这种抽象很少发生,这些流通常只是通过System类引用...
然而,感谢@harpun,他显然熟悉手头的教科书,指出,你所引用的课程是教科书库的一部分......