在文件中,每個條目將包含兩行;第一行是數字,第二行是標題。文件中的條目將按數字升序排列。二進制搜索幫助:將文件讀入數組,找到特定行
創建一個將文件讀入數組的程序。用戶然後將基於該號碼請求標題。您的程序將執行二進制搜索以查找標題。
目前,我從文件中讀取所有內容到一個arrayList中,然後將其轉換爲一個數組。
我的第一個主要問題是我的二進制搜索方法似乎沒有工作;我試圖搜索一個數字,它只是返回false。其次,即使這個設法工作,我不確定如何記錄文本文件中找到結果的哪一行。我認爲這是必要的,因爲我必須在後面輸出行。這是文本文件外觀的一個例子。
彌賽亞劇
晚間祈禱
良性的下迫害
等祈禱這是我的當前代碼
package Psalms;
import java.io.*;
import javax.swing.*;
import java.util.ArrayList;
import java.util.List;
public class Psalms {
public static void main(String[] args) throws IOException {
// Creates array list. Reads lines into it
List<String> psalms = new ArrayList<String>();
BufferedReader readFile = new BufferedReader(new FileReader("Psalms.txt"));
String line;
while ((line = readFile.readLine()) != null) {
psalms.add(line);
}
readFile.close();
String[] psalmArray = new String[psalms.size()];
psalmArray = psalms.toArray(psalmArray);
//Asks user what to search for.
String psalmSearch = (JOptionPane.showInputDialog("What number Psalm would you like to search for?"));
System.out.println("Binary Search: " + psalmSearch + " " + binarySearch(
psalmArray, 0, psalmArray.length - 1, psalmSearch));
}
public static boolean binarySearch(String myArray[], int left,
int right, String searchForPsalm) {
int middle;
if (left > right) {
return false;
}
middle = (left + right)/2;
if (myArray[middle].equals(searchForPsalm)) {
return true;
}
if (searchForPsalm.compareTo(myArray[middle]) < 0) {
return binarySearch(myArray, left, middle - 1,
searchForPsalm);
} else {
return binarySearch(myArray, middle + 1, right,
searchForPsalm);
}
}
}