Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

The code is from http://algs4.cs.princeton.edu/11model/BinarySearch.java.html for Algorithms textbook.

import java.util.Arrays;

public class BinarySearch {

    // precondition: array a[] is sorted
    public static int rank(int key, int[] a) {
        int lo = 0;
        int hi = a.length - 1;
        while (lo <= hi) {
            // Key is in a[lo..hi] or not present.
            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);

        // read key; print if not in whitelist
        while (!StdIn.isEmpty()) {
            int key = StdIn.readInt();
            if (rank(key, whitelist) == -1)
                StdOut.println(key);
        }
    }
}

I get this error

$ javac BinarySearch.java 
BinarySearch.java:44: cannot find symbol
symbol  : variable In
location: class BinarySearch
        int[] whitelist = In.readInts(args[0]);
                          ^
BinarySearch.java:49: cannot find symbol
symbol  : variable StdIn
location: class BinarySearch
        while (!StdIn.isEmpty()) {
                ^
BinarySearch.java:50: cannot find symbol
symbol  : variable StdIn
location: class BinarySearch
            int key = StdIn.readInt();
                      ^
BinarySearch.java:52: cannot find symbol
symbol  : variable StdOut
location: class BinarySearch
                StdOut.println(key);
                ^
4 errors
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
321 views
Welcome To Ask or Share your Answers For Others

1 Answer

Classes StdIn, StdOut and In aren't part of the standard Java libraries. They're support classes provided to go along with the Princeton course.

From the 1.1 Programming Model page linked in the source code:

Standard input and standard output. StdIn.java and StdOut.java are libraries for reading in numbers and text from standard input and printing out numbers and text to standard output. Our versions have a simpler interface than the corresponding Java ones (and provide a few tecnical improvements).

...

In.java and Out.java are object-oriented versions that support multiple input and output streams, including reading from a file or URL and writing to a file.

So if you want to use the binary search code as-is, you'll need to download those files.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...