对于我的一个课程,我必须使用二分查找首先查看报价是否存在(通过查找报价编号),如果确实如此,则打印报价。在文本文件中,每个引用都有两行。
第一行包含引号,第二行是引号。报价编号已经为该程序排序。
程序的要求如下:创建一个程序,将引号读入数组。 (完成)然后,用户将根据他们输入的号码请求标题。 (完成)然后,您的程序使用二进制搜索来查找引用(如果存在)。我目前占多数,但似乎没有用。我从一个arraylist读到一个阵列,但我在此之后无所事事。我已经坚持这个问题一段时间了,任何帮助将不胜感激!
编辑:**现有代码只是将其读入数组。我想要做的是查看数字是否存在以及是否存在,然后从文本文件中打印下面的引号。如果它不存在则打印出来它不存在。 **
程序大致应该是这样的。
到目前为止我的代码:
package binarysearch;
import java.io.*;
import java.util.ArrayList;
import javax.swing.JOptionPane;
public class Binarysearch {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader("quotes.txt"));
ArrayList list = new ArrayList();
String str = null;
//Getting all of the input from the textfile
while ((str = reader.readLine()) != null) {
list.add(str); //Getting all of the lines of the textfile
}
String array[] = new String[list.size()];
list.toArray(array);
String num = JOptionPane.showInputDialog("What quote number would you like to see? (1 - 99)");
System.out.println("Searching: " + num + " "+ binarySearch(array, 0, array.length - 1, num));
}
public static boolean binarySearch(String myArray[], int left,
int right, String num) {
//Temporary print for learning purposes
System.out.print("Searching array: ");
for (int i = left; i <= right; i++) {
System.out.print("[" + myArray[i] + "]");
}
System.out.println(" for " + num);
//end temporary print
int middle;
if (left > right) {
return false;
}
middle = (left + right) / 2;
if (myArray[middle].equals(num)) {
return true;
}
if (num.compareTo(myArray[middle]) > 0) {
return binarySearch(myArray, left, middle - 1,
num);
} else {
return binarySearch(myArray, middle + 1, right,
num);
}
}
}
我的文本文件:
1
quote 1
2
quote 2
4
quote 3
7
quote 4
8
quote 5
12
quote 6
16
quote 7
18
quote 8
22
quote 9
23
quote 10
答案 0 :(得分:0)
您可能会收到错误,因为当它检查用户的数字是否高于或低于中位数时,它有时会落在实际报价的索引中。索引将在引号或实际报价上,具体取决于输入的数字,因此即使它存在,您也会收到错误。您可以在方法中创建仅包含引号的新数组,也可以更改它以忽略包含引号的奇数索引。