Java中的数组列表的二进制搜索

时间:2019-03-07 02:17:24

标签: javascript search binary

我试图根据ID号的名称对文件进行二进制搜索。我已将文件放入数组列表中,但无法找出搜索部分。有人可以帮忙吗?

  
      
  1. 开设学生班。数据成员必须能够存储名称和ID号。
  2.   
  3. 使用Student类创建学生的ArrayList。
  4.   
  5. 使用包含来自文件directory.txt的学生姓名和ID号的数据集填充数组列表。注意:此文件包含   学生姓名按字母顺序排列。
  6.   
  7. 使用二进制搜索按名称查找学生并显示其ID号。
  8.   

文件显示为:

尼尔·阿伯克朗比

225-2726

Ackerman,加里·L。

225-2601

Aderholt,罗伯特·B。

225-4876

Akin,W. Todd

225-2561

亚历山大·罗德尼

225-8490

艾伦,托马斯·H。

225-6116

阿尔特米尔,杰森

225-2565

安德鲁斯,罗伯特·E。

225-6501

Arcuri,Michael A。

225-3665

乔,巴卡

225-6161,

    package studentNames;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ArrayList arr = new ArrayList();
        ArrayList ar = arr;
        // INPUT FILE AND SCANNER THAT READS THE FILE
        File inputFile;
        Scanner fileInputScan = null;

        try {
            inputFile = new File("C:\\Users\\jgued\\Desktop\\Directory.txt");
            fileInputScan = new Scanner(inputFile);
            while (fileInputScan.hasNext()) {
                // task 1: grab the first name
                String name = fileInputScan.nextLine();
                String idNumber = fileInputScan.nextLine();
                Student s = new Student(name, idNumber);
                arr.add(s);
            }

        } catch (FileNotFoundException e) {
            System.out.println("Error - This file could not be found.");
        } finally {
            if (fileInputScan != null)
                fileInputScan.close();
            System.out.println("Your Directory:");
            System.out.println(arr.toString());
            Scanner inp = new Scanner(System.in);
            String nextToken = inp.next();
            System.out.println("Who would you like to look up?");
            System.out.println(binarySearch(ar, 1, ar.size(),nextToken));
        }
    }
    static int binarySearch(ArrayList arr, int l, int r, String string) {
        if (r >= l) {
            int mid = l + (r - l) / 2;

            if (arr.get(mid) == string)
                return (int) arr.get(mid+1);
            if (arr.get(mid) != string)
                return binarySearch(arr, l, mid - 2, string);

            return binarySearch(arr, mid + 2, r, string);
        }
        return -1;

    }
}

package studentNames;

public class Student {

        private String name;
        private String idNumber;

        public Student ( String n,String i) {
            name = n;
            idNumber = i;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getMajor() {
            return idNumber;
        }

        public void setMajor(String idNumber) {
            this.idNumber = idNumber;
        }


        public String toString() {
            return name + " " + idNumber;
        }
    }

0 个答案:

没有答案