Странное поведение проверки условия цикла - C#
Формулировка задачи:
Пишу алгоритм сортировки замещением. Дали задание написать алгоритм не только для возрастающего порядка, но и для убывающего.
Такое очевидное решение вполне работоспособно.
мне захотелось написать нечто более изящное
Но не тут то было: я всегда думал, что оператор && прерывает проверку, если первое условие ложно и не касается второго условия (ибо смысл?). Оказалось, что когда I==-1, он лезет в nondecreasing ? a[i] > key : a[i] < key, тем самым вызвая исключение System.IndexOutOfRangeException. Почему поведение оператора && такое непредсказуемое?
public static int[] Insertion(int[] a, bool nondecreasing = true) { if (nondecreasing) { for (int j = 1; j < a.Length; j++) { int key = a[j]; int i = j - 1; while (i >= 0 && a[i] > key) { a[i + 1] = a[i]; --i; } a[i + 1] = key; } } else { for (int j = 1; j < a.Length; j++) { int key = a[j]; int i = j - 1; while (i >= 0 && a[i] < key) { a[i + 1] = a[i]; --i; } a[i + 1] = key; } } return a; }
public static int[] Insertion(int[] a, bool nondecreasing = true) { for(int j = 1; j < a.Length; j++) { int key = a[j]; int i = j - 1; while (i >= 0 && nondecreasing ? a[i] > key : a[i] < key) { a[i + 1] = a[i]; --i; } a[i + 1] = key; } return a; }
скобки вокруг первого условия не помогли
Решение задачи: «Странное поведение проверки условия цикла»
textual
Листинг программы
while (i >= 0 && nondecreasing ? a[i] > key : a[i] < key) == while ((i >= 0 && nondecreasing) ? a[i] > key : a[i] < key)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д