2017-12-05 19 views
-4

Dies ist eines meiner Hausaufgaben Probleme, wo ich die Nummer 8675309 in einer Textdatei mit 1000000 Elemente finden muss. Ich bin verwirrt, wie man die lineare Suche verwendet, damit dies funktioniert. Auch muss meine Textdatei, die in meinen Java-Ordner geht, csc210hw5A-datafile genannt werden?Lineare Suche Hausaufgaben mit Textdatei

import java.util.Scanner; 
import java.util.NoSuchElementException; 

import java.io.FileInputStream; 
import java.io.FileNotFoundException; 

public class SKELcsc210hw5A { 

// linearSearch: return index of matching element. 
//    If not found, return -1. 
private static int linearSearch(int[] arr, int N, int query) { 
    int idx = -1; 
    for(int i = 0; i < N; i++){ 
       if(arr[i]==query);{ 
       //stuck here 
      } 

      } 
    return idx; 

} 

private static int[] loadFile(String fileName) { 
    int[] vals = null; 
    int sz = -1; 
    try { 
     Scanner sc = new Scanner(new FileInputStream(fileName)); 
     if(sc.hasNextInt()) 
      sz = sc.nextInt(); 
     if (sz < 0) { 
      System.out.println("File not the right format!"); 
      return vals; 
     } 
     vals = new int[sz]; 
     for(int ii = 0; ii < sz; ii++) { 
      vals[ii] = sc.nextInt(); 
     } 
    } catch (FileNotFoundException excptn) { 
     System.out.println(excptn.getMessage()); 
    } catch (NoSuchElementException excptn) { 
     System.out.println("Unexpected end of file!"); 
     vals = null; 
    } 
    return vals; 
} 

public static void main (String[] args) { 
    String fName = "csc210hw5A-datafile.txt"; 
    if(args.length > 0) { 
     fName = args[0]; 
    } 
    int[] values; 

    System.out.println("Loading... " + fName); 
    if((values = loadFile(fName)) == null) { 
     System.out.println("Failed to read " + fName + ": Exiting."); 
     return; 
    } 
    System.out.println("Loaded " + fName + " successfully."); 

    int query = 8675309; 
    if(args.length > 1) { 
     query = Integer.parseInt(args[1]); 
    } 
    System.out.println("Query to search: " + query); 
    System.out.println("Total elements to search: " + values.length); 

    int idx = linearSearch(values, values.length, query); 

    if(idx != -1) 
     System.out.println("Query found on line " + (idx+1)); 
    else 
     System.out.println("Query not found"); 
    } 
} 

Alles nach loadFile ist abgeschlossen.

+0

Sie haben ein falsches ';' nach dem 'if', aber ich bin neugierig, warum Sie fragen, wie man den Dateinamen ändert, obwohl das' '' '' eine Falle von Ihrem Lehrer ist, und die Dateinamensfrage stammt auch von Ihrem Lehrer, wenn er den Code liest, um zu verstehen, wie man ihn ändert. –

+0

Ich würde vorschlagen, dass Sie die Grundlagen der linearen Suche sowie Datei-Reader lesen. –

Antwort

0

Von: http://www.geeksforgeeks.org/linear-search/

class LinearSearch { 
// This function returns index of element x in arr[] 
static int search(int arr[], int n, int x) { 
    for (int i = 0; i < n; i++) { 
     // Return the index of the element if the element is found 
     if (arr[i] == x) { return i; } 
    } 

    // return -1 if the element is not found 
    return -1; 
} 
} 

Die Idee ist: Ihr Array scannen, bis Sie das Ding finden. Wenn Sie dies tun, geben Sie sofort seine Position zurück. Wenn Sie es nicht finden, geben Sie -1 zurück.

Achten Sie darauf, sowohl diese S.O. Seite und die Seite, die ich verlinkt habe.

+0

Ja, ich habe es versucht und es hat funktioniert. Ich danke dir sehr! – Thinking

0
private static int linearSearch(int[] arr, int N, int query) { 
    int idx = -1; 
    boolean isFound = false; 
    for(int i = 0; i < N && !isFound; i++) 
    { 
     if(arr[i]==query) 
     { 
      isFound = true; 
      idx = i 
     } 

    } 
    return idx; 
} 
+0

und ja die Textdatei muss im selben Verzeichnis wie Ihr Java-Code-Ordner sein. Sie können Ihre Textdatei mit einem beliebigen Namen benennen. Es muss nicht spezifisch sein "csc210hw5A-datafile.txt" –

+0

Sie wollen wahrscheinlich auch dort eine Pause. Außerdem wäre es für das OP nützlich, wenn Sie erklären, was Sie getan haben. –

+0

danke! Aber der Code, den Sie oben geschrieben haben, funktioniert nicht, wenn die Anweisung den Fehler gibt: Invert If – Thinking