これは、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後のすべてが完了しました。
あなたは 'if'の後に偽の'; 'がありますが、ファイル名を変更する方法について尋ねる理由は不思議ですが、第二の考えでは、'; 'はインストラクターのトラップ、ファイル名の質問は、教師がコードを読んでそれを変更する方法を理解することからも得られます。 –
リニア検索の基本とファイルリーダーを読むことをお勧めします。 –