感谢各位大神!
代码是直接从官网保存下来的,在终端运行时出现以下错误提示,不知道是该怎么改啊...
MA:src vicky$ javac BinarySearch.java
MA:src vicky$ java BinarySearch tinyW.txt < tinyT.txt
Exception in thread "main" java.lang.NumberFormatException: For input string: "{\rtf1\ansi\ansicpg936\cocoartf1404\cocoasubrtf470"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at In.readAllInts(In.java:528)
at BinarySearch.main(BinarySearch.java:93)
源代码如下
/******************************************************************************
- Compilation: javac BinarySearch.java
- Execution: java BinarySearch whitelist.txt < input.txt
- Dependencies: In.java StdIn.java StdOut.java
- Data files: https://algs4.cs.princeton.edu/11model/tinyW.txt
- https://algs4.cs.princeton.edu/11model/tinyT.txt
- https://algs4.cs.princeton.edu/11model/largeW.txt
- https://algs4.cs.princeton.edu/11model/largeT.txt *
- % java BinarySearch tinyW.txt < tinyT.txt
- 50
- 99
- 13 *
- % java BinarySearch largeW.txt < largeT.txt | more
- 499569
- 984875
- 295754
- 207807
- 140925
- 161828
- [367,966 total values]
- ******************************************************************************/
import java.util.Arrays;
/**
- The {@code BinarySearch} class provides a static method for binary
- searching for an integer in a sorted array of integers.
- The indexOf operations takes logarithmic time in the worst case.
- For additional documentation, see Section 1.1 of
- Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne. *
- @author Robert Sedgewick
-
@author Kevin Wayne
*/
public class BinarySearch {/**
- This class should not be instantiated. */ private BinarySearch() { }
/**
- Returns the index of the specified key in the specified array. *
- @param a the array of integers, must be sorted in ascending order
- @param key the search key
- @return index of key in array {@code a} if present; {@code -1} otherwise */ public static int indexOf(int[] a, int key) { 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; }
/**
- Returns the index of the specified key in the specified array.
- This function is poorly named because it does not give the rank
- if the array has duplicate keys or if the key is not in the array. *
- @param key the search key
- @param a the array of integers, must be sorted in ascending order
- @return index of key in array {@code a} if present; {@code -1} otherwise
- @deprecated Replaced by {@link #indexOf(int[], int)}. */ @Deprecated public static int rank(int key, int[] a) { return indexOf(a, key); }
/**
- Reads in a sequence of integers from the whitelist file, specified as
- a command-line argument; reads in integers from standard input;
- prints to standard output those integers that do not appear in the file. *
-
@param args the command-line arguments
*/
public static void main(String[] args) {// read the integers from a file
In in = new In(args[0]);
int[] whitelist = in.readAllInts();// sort the array
Arrays.sort(whitelist);// read integer key from standard input; print if not in whitelist
while (!StdIn.isEmpty()) {
int key = StdIn.readInt();
if (BinarySearch.indexOf(whitelist, key) == -1)
StdOut.println(key);
}
}
}