Когда вы звоните Selection.sort(list)
в main
, кажется, что list
имеет длину 10000.
Каждый элемент по умолчанию равен нулю.
Итак, если вы прочитаете три слова, ваш список будет выглядеть следующим образом:
word1,word2,word3,null,null,null......null
Быстрый взлом, чтобы вам не нужно изменять размер массива - попробуйте сделать свой внутренний цикл в Selection::sort
:
for (int j = i + 1; j < n; j++) {
if (a[j] == null) {
break;
}
if (less(a[j], a[min]))
min = j;
}
Или - изменить размер массива перед обработкой.
Или - используйте ArrayList, чтобы помещать слова в массив и затем преобразовывать его в массив, если вам абсолютно необходимо использовать массив.
Я бы рекомендовал использовать long для представления числа тиков . Это то, что TimeSpan использует в качестве своего внутреннего представления. Это позволяет вам легко воссоздать ваш объект с интервалом времени . Метод FromTicks () и вывод в базу данных с использованием свойства Timespan.Ticks . Наименьшей единицей времени в .NET является отметка, равная 100 наносекундам
CE SQL не имеет типа времени или определяемых пользователем типов, таким образом, Вашим выбором является дата и время или интервал, представляющий минуты. Если самое большое время, которое необходимо сохранить, является 23:59 = 23 * 60 + 59 = 1439 = число минут за день, запускающийся с минуты 0, smallint является самым маленьким целочисленным типом, который разместит тот диапазон.
Сопротивляйтесь искушению сохранить часы и минуты в отдельных столбцах как tinyints. Это использовало бы то же пространство как единственный smallint, но затем каждое вычисление времен потребует умножающихся часов 60 и добавляющие минуты и каждый order by
потребует двух столбцов вместо одного.
Хранилище как минуты; демонстрирующийся, можно разделить минуты на часы и минуты с
select floor( absminutes / 60 ) as hours, absminutes % 60 as minutes,
from some table
order by absminutes;
Я назвал бы столбец (столбцы) minutes
, или absminutes
(в течение абсолютных минут), если Вы хотите отличить минуты 1439 года через день с этих 0-59 минут через час.
Для преобразования из базы данных оценивают объекту Промежутка, используют ctor Timespan(int, int, int)
как это new TimeSpan( floor(absminutes / 60 ), absminutes % 60, 0)
или (лучше) ctor Timespan(long)
с new Timespan( absminutes * TimeSpan.TicksPerMinute )
.
Чтобы вставить или обновить базу данных от объекта Промежутка, установите absminutes на someTimespan.TotalMinutes % 1440
.
Сохранить как varchar. Сохраните в sql, используя TimeSpan.ToString()
. Читать из sql как:
TimeSpanObj = TimeSpan.Parse(fieldValue)