-1

我有一本算法书并将代码复制到我的 eclipse 或javac用于编译的 windows cmd 中,In, StdIn,StdOut没有解决。我看到我已经设置JAVA_HOME为我的 jdk dir 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);

        }
    }
}

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

4

2 回答 2

3

至少有几本 Java 编程教科书不会让您使用标准 Java,而是使用它们自己的类,因为这对于初学者来说应该“更容易”。其中一个是 R. Sedgewick 和 K. Wayne 的“Java 编程简介”,另一个是 Garside 和 Mariani 的“Java:第一次接触”。

您需要下载自定义类并将其放在类路径中;如何做到这一点应该在教科书中描述,如果它有任何好处。

有时这是在实验室计算机上为您完成的,但您必须在自己的计算机上自己完成。

于 2013-10-13T13:38:31.503 回答
-1

称为 Stdin 和 StdOut 的流称为

System.in

System.out

分别在Java中。

乍一看,您似乎只是错过了课堂上的这两行:

static InputStream StdIn = System.in;
static PrintStream StdOut = System.out;

但是,请注意,在 Java 中,命名约定指定使用驼峰式命名的变量名,以非大写字母开头。所以它应该是这样的:

static InputStream stdIn = System.in;
static PrintStream stdOut = System.out;

(不要忘记更改方法中的变量引用...)
但是很少进行这种抽象,这些流通常只是通过 System 类引用...

但是,感谢@harpun,他显然对手头的教科书很熟悉,他指出,您所引用的课程是为教科书制作的图书馆的一部分......

于 2013-10-13T13:26:48.353 回答