我对其中一个课程有疑问,如下所示。








- 您需要创建一个搜索ArrayList的方法。一个。对搜索方法使用二进制搜索算法,其中包括排序
功能。不要使用Java.util.Arrays.binarySearch()方法,但是
编写二进制搜索算法代码。湾显示数组元素
和数组索引。


我在网上找到答案时遇到了麻烦(现在已经找了几个小时)。

 
我理解二进制搜索是如何工作的,但不是当涉及到stings时,我理解一个数组需要在二进制搜索之前进行排序,但是如何在不使用Array.sort函数的情况下执行此操作。


有人能指出我正确的方向来解决这个问题吗?


干杯!


以下是代码:二进制搜索代码是非常低调的,而我正在调用的搜索部分是在按下“3”时的中间位置。


 import java.util.ArrayList;
 import java.util.List;

 import javax.swing.JOptionPane;&#xA ;


公共类BirdArrayList {

 static ArrayList< String> birdList = new ArrayList< String>(5);
 static String response;
 static int birdIndex = -1;

 public static void main(String [] args)
 {

 birdList.add( “乌鸦”); //将五个初始鸟添加到birdList ArrayList
 birdList.add( “鹊”);
 birdList.add( “鸽”);
 birdList.add( “雀”);
 birdList.add( “翠鸟”);


 while(!“5”.equals(response))
 {
 response = JOptionPane.showInputDialog(“请输入您想要做的数字\ n”
 +“1 \ t将鸟添加到列表中\ n”
 +“2 \ t删除一只鸟从列表\ n“
 +”3 \ t搜索列表中的鸟\ n“
 +”4 \ t显示鸟类列表\ n“
 +”5 \ t退出程序“); //程序的主屏幕,格式很好

 if(response.equals(“1”))//添加一只鸟
 {
的addEntry();
 }

 if(response.equals(“2”))//从列表中删除一只鸟
 {
 deleteEntry();
 }

 if(response.equals(“3”))//搜索鸟类
 {
 response = JOptionPane.showInputDialog(“请输入一个鸟名来搜索它\ n并查看它是否在列表中!”);
 int birdIndex =(binarySearch(birdList,response));
 if(birdIndex> = 0)
 {
 JOptionPane.showMessageDialog(null,“鸟名”+响应+“在列表中”
 +“\ nin数组索引(”+ birdIndex +“)”);
 }
 }


 if(response.equals(“4”))//显示数组
 {
 displayArray();
 }
 if(response.equals(“5”))//退出程序
 {
 System.exit(0);
 }
 }

 }

 public static void addEntry()
 {
 response = JOptionPane.showInputDialog(“请输入一个鸟名来将其添加到列表中”); 
 birdList.add(响应); //在下一个数组位置
中添加对birdList的响应JOptionPane.showMessageDialog(null,response +“added!”); //显示添加的鸟名
 displayArray();
 }

 public static void deleteEntry()
 {
 response = JOptionPane.showInputDialog(“请输入一个鸟名来从列表中删除它”);
 boolean isRemoved = false;
 for(int i = 0; i< birdList.size(); i ++)
 {
如果(birdList.get(ⅰ).equalsIgnoreCase(响应))
 {
 birdList.remove(ⅰ);
 JOptionPane.showMessageDialog(null,response +“removed!”);
 isRemoved = true;
 }

 }
 if(isRemoved == false)
 {
 JOptionPane.showMessageDialog(null,“你试图删除的鸟不在列表中”);
 }
 displayArray();

 / *在重新阅读要求之前,我最初是怎么做的。
 /*if(birdList.contains(response))
{
 birdList.remove(响应);
 JOptionPane.showMessageDialog(null,response +“removed!”);
 }
否则
 {
 JOptionPane.showMessageDialog(null,“你试图删除的鸟不在列表中”);
 } * /
 }
 public static void displayArray()
 {
 String displayList =“”;
 int tempCounter = 0;
 for(int i = 0; i< birdList.size(); i ++)//显示ArrayList
 {
 String tempBird = birdList.get(i); //使tempBird在displayList公式2中更加可行
 tempCounter ++; //在列表中的鸟之前显示一个nuber
 displayList + = tempCounter +“。”+ tempBird +“\ n”; //很好地格式化
 }
 JOptionPane.showMessageDialog(null,displayList); //显示列表

 }

 public static int binarySearch(List< String> birdList,String response)
 {
 int low = 0;
 int high = birdList.size();
 int mid =(low + high)/ 2;



 while(低< high&&!birdList.get(mid).equalsIgnoreCase(response))
 {
 if(birdList.get(mid).equalsIgnoreCase(response))
 {
 low = mid + 1;
 
别的
 {
高=中 - 1;
 }

 mid =(低+高)/ 2;

如果(低>高){
 birdIndex = mid;
 }

 }
 System.out.println(“低”+低+“\ nhigh”+高+“\ nmid”+ mid +“\ nBI”+ birdIndex);
 birdIndex = mid;
 return birdIndex;
 }
}
 代码>


答案 0 :(得分:0)
您可以使用任何种类的算法手动对数组进行排序,使用compareTo(String otherString)方法查看另一个字符串是否小于"或者"大于"另一个。
如果您要使用选择排序算法,代码将如下所示:
// will iterate throughout the entire list to sort
for (int i = 0; i < birdList.size() - 1; i++) {
int lowestVal = i;
// will iterate through list to find next smallest value
for (int j = i + 1; j < birdList.size(); j++) {
if (birdList.get(j).compareTo(birdList.get(lowestVal)) < 0)
lowestVal = j; // found new minimum value
}
// swap out the next lowest value with the next value in the list
String temp = birdList.get(i);
birdList.set(i, birdList.get(lowestVal));
birdList.set(lowestVal, temp);
}
编辑:更多信息。 compareTo方法是String类碰巧实现的Comparable接口的一部分。这允许您基本上比较字符串并以这种方式对它们进行排序。