我试图根据ID号的名称对文件进行二进制搜索。我已将文件放入数组列表中,但无法找出搜索部分。有人可以帮忙吗?
- 开设学生班。数据成员必须能够存储名称和ID号。
- 使用Student类创建学生的ArrayList。
- 使用包含来自文件
directory.txt
的学生姓名和ID号的数据集填充数组列表。注意:此文件包含 学生姓名按字母顺序排列。- 使用二进制搜索按名称查找学生并显示其ID号。
文件显示为:
尼尔·阿伯克朗比
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;
}
}