Can someone find why this isn’t being sorted I can’t seem to find what I have wrong? The output that is being displayed is how I input them after each other thus the sort method isn’t working…

// Sorting Ticket by Alphabetic Order - Method public void SortTicket() { boolean valid = true; for (int i = 0; i < tList.size(); i++) { valid = false; Ticket t1 = (Ticket) tList.get(i); Ticket t2 = (Ticket) tList.get(i++); if (t1.GetSurname().compareTo(t2.GetSurname()) > 0) { tList.remove(t1); tList.add(i++, t1); valid = true; } } for (int i = 0; i < tList.size(); i++) { Ticket tmpTick = (Ticket) tList.get(i); System.out.println(tmpTick.ToString()); } }

There are three errors:

1. It does `i++`

instead of `i+1`

. `i++`

means: return `i`

then increment its value. So `t1`

and `t2`

are the same element.

2. It runs a full scan of the list, while it should stop at `tList.size()-1`

to avoid an IndexOutOfBoundsException.

3. It isn’t a real bubble sort. You need two loop.

Moreover you never use `valid`

, so it should be removed. I replaced it with a flag that is true if the list is already sorted.

public void SortTicket() { int size = tList.size(); int end = size-1; // size-1, so you don't get an IndexOutOfBoundsException boolean sorted = false; for(int i = 0; i < size-1 && !sorted; i++) { sorted = true; // if you never execute a swap, the list is already sorted for (int j=0; j<end; j++) { Ticket t1 = (Ticket) tList.get(j); Ticket t2 = (Ticket) tList.get(j+1); // j+1, so you don't change the value of i if(t1.GetSurname().compareTo(t2.GetSurname()) > 0) { sorted = false; tList.remove(j); tList.add(j+1, t1); // j+1, so you don't change the value of i } } end--; } for(int i = 0; i<size; i++) { Ticket tmpTick = (Ticket) tList.get(i); System.out.println(tmpTick.ToString()); } }

Lastly, if you’re using generics, you could declare tList as `List<Ticket> tList`

. This way you don’t need to cast the object returned by `list.get(index)`

.

## Recent Comments