【发布时间】:2015-04-22 17:34:42
【问题描述】:
我有这个作业问题,我已经能够相当容易地完成,但我坚持如何对我构建的 ArrayList 实现插入排序。
到目前为止,这是我的代码:
public class EmailDirectory
{
public static void main(String[] args)
{
new EmailDirectory(); //relay main menu until 3 is entered
}
public ArrayList<String> emailRecords=new ArrayList<String>(); //construct Array for directory, Array or ArrayList?
public EmailDirectory()
{
Scanner scnr=new Scanner(System.in); //scanner and empty string for option choice
String menuChoice;
do{ //do while to keep repeating
System.out.println("Please enter the number of your option choice:");
System.out.println("1. Add a new contact");
System.out.println("2. Search for an exsisting contact");
System.out.println("3. Exit");
menuChoice=scnr.nextLine();
if (menuChoice.equals("1")) //add new contact
{
addContact();
}
else if (menuChoice.equals("2")) //search contacts
{
searchContact();
}
}
while(menuChoice.equals("3")==false);
}
private void addContact()
{
Scanner addCont=new Scanner(System.in); //scanner for new contact
String newCont;
System.out.println("Please enter the email adress."); //prompt for user
newCont=addCont.nextLine();
emailRecords.add(newCont); //add to array for access later
insertionSort(emailRecords);
}
private void searchContact()
{
//TODO
System.out.println(emailRecords); //test output, change laster
}
public void insertionSort(ArrayList<String> emailrecords) //insertion sort, pass by parameter?
{
int i,j;
String key;
ArrayList<String> inputArray=emailRecords;
for (j=1; j<inputArray.size(); j++)
{
key = inputArray.get(j);
i = j - 1;
while (i >= 0)
{
if (key.compareTo(inputArray.get(i)) > 0) {
break;
}
String element=inputArray.get(i+1);
element = inputArray.get(i);
i--;
}
String element=inputArray.get(i+1);
element = key;
}
}
}
作业问题是创建一个电子邮件目录并使用插入对其进行排序,但我似乎无法弄清楚为什么数组不会排序。我可以添加电子邮件,但是当我打印出来时只是将其附加到末尾。
建议和建议将不胜感激,非常感谢!
【问题讨论】:
-
是时候调试你的程序了。尝试使用调试器逐步执行此操作,或者至少添加一些打印语句,以确定程序的执行何时与您的期望不同。尝试将其缩小到一行。
-
提示:“插入排序”这个名称意味着在算法过程中的某处插入了
-
我没有看到像 inputArray.set(...) 这样的东西。
-
声明一个新的
List并从旧列表中逐个删除对象并按顺序插入到新的List中可能会更容易。 -
如果您没有绑定到 ArrayList,您可能会发现双向链表(可能是 LinkedList)在这里是更好的选择。这样你就不需要在数组中移动东西(你需要做的事情,但此时实际上并没有做)。
标签: java arraylist insertion-sort