2017-12-05 12 views
-4

これは、1000000要素のテキストファイルで8675309という数字を見つけなければならない宿題の1つです。私はLinear Searchを使ってこれを動作させる方法を混同しています。また、私のJavaフォルダに入っているテキストファイルはcsc210hw5A-datafileと呼ばれなければなりませんか?テキストファイルのリニア検索宿題

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

loadFile後のすべてが完了しました。

+0

あなたは 'if'の後に偽の'; 'がありますが、ファイル名を変更する方法について尋ねる理由は不思議ですが、第二の考えでは、'; 'はインストラクターのトラップ、ファイル名の質問は、教師がコードを読んでそれを変更する方法を理解することからも得られます。 –

+0

リニア検索の基本とファイルリーダーを読むことをお勧めします。 –

答えて

0

から: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; 
} 
} 

アイデアがある:あなたがものを見つけるまで、あなたの配列をスキャンします。あなたがそうするとき、すぐにその位置を返します。あなたがそれを見つけられないなら、-1を返します。

必ずこの両方のS.O.を引用してください。ページ、リンクしたページ

+0

うん、私はこれを試して、それは働いた。どうもありがとうございます! – 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

、はい、テキストファイルはJavaコードフォルダと同じディレクトリにある必要があります。任意の名前でテキストファイルに名前を付けることができます。それは具体的に "csc210hw5A-datafile.txt"である必要はありません。 –

+0

あなたはおそらく 'break;'も望みます。さらに、もしあなたが何をしたのかを説明すれば、OPのために役立つだろう。 –

+0

ありがとうございます!しかし、あなたが上で書いたコードは動作しません。文でエラーが返された場合:Invert If – Thinking