为什么In,StdIn,StdOut没有解决

时间:2013-10-13 13:25:45

标签: java

我有一本算法书并将代码复制到我的eclipse或使用javac编译的windows cmd,InStdInStdOut未解析。我看到我已将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);

        }
    }
}

粗体类(此处用** **括起来)未解析。

2 个答案:

答案 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,他显然熟悉手头的教科书,指出,你所引用的课程是教科书库的一部分......