2015-11-05 2 views
0

Я делаю программу, которая многое делает с списком автомобилей, проверяя все, и последнее, что мне нужно сделать, это сортировать эти машины по алфавиту по строкам. Вот код, который не работает, как это должно быть.Любые идеи, почему эта сортировка в алфавитном порядке не работает?

for (int j = 0; j < towns[townNo].townVehicleCount-1; j++) { 
    for (int k = 1; k < towns[townNo].townVehicleCount; k++) { 
     int identical; 
     identical = towns[townNo].Vehicles[j].Brand.CompareTo(towns[townNo].Vehicles[k].Brand); 
     if (identical == 1) { 
      towns[townNo].Vehicles[towns[townNo].townVehicleCount + 1] = towns[townNo].Vehicles[j]; 
      towns[townNo].Vehicles[j] = towns[townNo].Vehicles[k]; 
      towns[townNo].Vehicles[k] = towns[townNo].Vehicles[towns[townNo].townVehicleCount + 1]; 
     } 
     if (identical == -1) { 
      towns[townNo].Vehicles[towns[townNo].townVehicleCount + 1] = towns[townNo].Vehicles[k]; 
      towns[townNo].Vehicles[k] = towns[townNo].Vehicles[j]; 
      towns[townNo].Vehicles[j] = towns[townNo].Vehicles[towns[townNo].townVehicleCount + 1]; 
     } 
    } 
} 
+0

Что происходит? несортированное, неизмененное, исключение? –

+0

@HenkHolterman он сортирует, но кажется случайным образом. здесь https://i.imgur.com/XC05W6t.jpg –

+0

Если «города [городNo] .Vehicles» имеет тип «IEnumerable », вы можете просто позвонить в OrderBy (v => v.Brand) –

ответ

0

Я думаю, что здесь есть две критические проблемы.

1.

for (int j = 0; j < towns[townNo].townVehicleCount-1; j++) { for (int k = 1; k < towns[townNo].townVehicleCount; k++) {

изменить его

for (int j = 0; j < towns[townNo].townVehicleCount; j++) { 
    for (int k = j+1; k < towns[townNo].townVehicleCount; k++) { 

2. Теперь, почти в каждой строке языка программирования функция сравнения возвращает положительное или отрицательное значение в зависимости от сравнения. Итак, я думаю, вы должны изменить if (identical == 1) { и if (identical == -1) { линии, такие как if (identical > 0) { или if (identical < 0) { согласно вашей логике.

Надеюсь, это поможет вам немного.

+0

Это то, что я получаю сейчас ... Solaris; MAN; Scania; Alfa; Jeep; Peugeot; Volvo; –

0

Ответ был очень простым!

«Кажется, вы всегда меняете элементы j и k, когда они разные. Удалите одно из операторов if, чтобы их менять, когда элементы не в правильном порядке».

Большое спасибо, @Henrik

Смежные вопросы