二进制搜索数字和报价?

时间:2014-05-06 23:19:52

标签: java arrays arraylist

对于我的一个课程,我必须使用二分查找首先查看报价是否存在(通过查找报价编号),如果确实如此,则打印报价。在文本文件中,每个引用都有两行。

第一行包含引号,第二行是引号。报价编号已经为该程序排序。

程序的要求如下:创建一个程序,将引号读入数组。 (完成)然后,用户将根据他们输入的号码请求标题。 (完成)然后,您的程序使用二进制搜索来查找引用(如果存在)。我目前占多数,但似乎没有用。我从一个arraylist读到一个阵列,但我在此之后无所事事。我已经坚持这个问题一段时间了,任何帮助将不胜感激!

编辑:**现有代码只是将其读入数组。我想要做的是查看数字是否存在以及是否存在,然后从文本文件中打印下面的引号。如果它不存在则打印出来它不存在。 **

程序大致应该是这样的。 enter image description here

到目前为止我的代码:

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

1 个答案:

答案 0 :(得分:0)

您可能会收到错误,因为当它检查用户的数字是否高于或低于中位数时,它有时会落在实际报价的索引中。索引将在引号或实际报价上,具体取决于输入的数字,因此即使它存在,您也会收到错误。您可以在方法中创建仅包含引号的新数组,也可以更改它以忽略包含引号的奇数索引。