2013-04-25 8 views
14

Der Code ist von http://algs4.cs.princeton.edu/11model/BinarySearch.java.html für Algorithmuss Lehrbuch.Kompilierfehler: Symbol nicht gefunden: In, StdIn und StdOut

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); 
     } 
    } 
} 

Ich erhalte diesen Fehler

$ 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 
+0

Ja @ Jon ist richtig. Es zeigt einen Fehler in meinem Editor. –

Antwort

29

Klassen StdIn, StdOut und In sind nicht Bestandteil der Standard-Java-Bibliotheken. Sie sind Support-Klassen zur Verfügung gestellt, um mit dem Kurs in Princeton zu gehen.

Von der Seite 1.1 Programming Model im Quelltext verknüpft:

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.

Also, wenn Sie den binären Suchcode verwenden mögen, wie sie ist, werden Sie diese Dateien herunterladen.

+0

Ist es wirklich direkt voll für unser Programm? Bitte hilf mir . –

+1

@JDeveloper: Ich verstehe Ihre Frage nicht vollständig (es ist nicht klar), aber Sie können diese Klassen selbst verwenden, um mit 'BinarySearch.java' zu arbeiten, ja. Sehen Sie die Lizenzbedingungen, wenn Sie sie woanders verwenden möchten. –

+0

Danke @Jon für Ihre Antwort. –

3

können Sie ersetzen dann mit

Ausgang:

System.out.println(key); 

Eingang

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 
String Key= null; 
try { 
    Key = reader.readLine(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

Sie werden mithilfe von benutzerdefinierten Bibliotheken den Wert drucken trösten (vermutlich) Sie kann die Ausgabe zur Konsole umleiten.

-2

Sie sollten System.in und System.out anstelle von StdIn und StdOut verwenden.
Eine ObjectInputStream das Eingabesystem Einwickeln der folgenden Art und Weise streamen:
ObjectInputStream ois = new ObjectInputStream(System.in);
Es hat eine readInt Methode hat, amd zu überprüfen, ob es leer ist, müssen Sie die EOFException fangen.

2

StdIn und In sind benutzerdefinierte Bibliotheken, die im Download der algs4-Klasse enthalten sind. Führen Sie das Programm mit dem Befehl java-algs4 statt nur Java und es sollte funktionieren.

5

Wenn Sie bereits die Umgebung empfohlen für den Kurs einzurichten, fügen Sie nur diese Zeilen in Ihre Java-Datei

import edu.princeton.cs.algs4.StdIn; 
import edu.princeton.cs.algs4.StdOut; 
+0

Ich habe dies mit DrJava und das Programm kompiliert. Vielen Dank. Meine Frage ist, wie fügen Sie das Paket edu..princeton.cs.algs4 bei der Verwendung von Eclipse hinzu? Ich konnte es nicht mit Hilfe von Eclipse kompilieren –

+0

Wow, dass mit dem Princeton bereitgestellten Compiler gearbeitet hat, cool! – sud007

Verwandte Themen