У нас в Сане сейчас бум на кистевые тренажеры PowerBall. В нашей комнате валяется такая модель (со счетчиком). Я долго был рекордсменом (11604 об/мин), но Леонид побил мой рекорд буквально 5 минут назад (11880 об/мин). Надо дальше тренироваться...
Хороший подарок на Новый Год. Мне, например, такая модель нравится.
среда, 12 декабря 2007 г.
Одноклассники
Пили пиво со школьными друзьями: Сергей Шумский, Алексей Матц и Алексей Разницын. Не виделись лет 15!
Хорошо посидели. Выпили весь Guinness в кабаке Медведь. Много о чем поболтали. Собираемся собрать побольше народу на февральский слет выпускников, так как, говорят, что наша классный руководитель последний год работает. Надо бы успеть повидаться. Интересно, что некоторые не поменялись совсем, а других никак не узнать.
Хорошо посидели. Выпили весь Guinness в кабаке Медведь. Много о чем поболтали. Собираемся собрать побольше народу на февральский слет выпускников, так как, говорят, что наша классный руководитель последний год работает. Надо бы успеть повидаться. Интересно, что некоторые не поменялись совсем, а других никак не узнать.
День выборов
Выборы! Выборы! Кандидаты - ...
Второго декабря я был в Таллинне. Известная проблема, что половина населения Эстонии - русские, половина из которых - граждане России. Голосовать я в Таллинне не мог, так как зарегистрирован в подмосковье. Но очереди видел.
Первая очередь от консульства России на улице Лай доходила до олененка, поворачивала в сторону улицы Пикк, по которой уходила в даль. Вторая - от гостиницы SAS, что за Домом Торговли, мимо здания парковки уходила в даль по улице Рявала. Концов этих очередей я не видел - было не по пути. Народ, в основном, пожилой. Молодых напрягает стоять в очередях по несколько часов.
Второго декабря я был в Таллинне. Известная проблема, что половина населения Эстонии - русские, половина из которых - граждане России. Голосовать я в Таллинне не мог, так как зарегистрирован в подмосковье. Но очереди видел.
Первая очередь от консульства России на улице Лай доходила до олененка, поворачивала в сторону улицы Пикк, по которой уходила в даль. Вторая - от гостиницы SAS, что за Домом Торговли, мимо здания парковки уходила в даль по улице Рявала. Концов этих очередей я не видел - было не по пути. Народ, в основном, пожилой. Молодых напрягает стоять в очередях по несколько часов.
Java Puzzle 66: A Private Matter
Что напечатает следующая программа?
class Base {
public String name = "Base";
}
class Derived extends Base {
private String name = "Derived";
}
public class PrivateMatter {
public static void main(String[] args) {
System.out.println(new Derived().name);
}
}
Программа не скомпилируется. Дело в том, что поля класса не могут переопределять поля суперкласса как, например, методы. В данном случае класс Derived скрывает поле name класса Base (JLS 8.3). Это корректно, но нерекомендуется, так как противоречит принципу Лискова: если что-то можно делать с базовым классом, то то же самое должно быть возможно делать с его потомком. Чтобы решить проблему с доступом к полю name класса base надо переписать код так:
public class PrivateMatter {
public static void main(String[] args) {
System.out.println(((Base) new Derived()).name);
}
}
class Base {
public String name = "Base";
}
class Derived extends Base {
private String name = "Derived";
}
public class PrivateMatter {
public static void main(String[] args) {
System.out.println(new Derived().name);
}
}
Программа не скомпилируется. Дело в том, что поля класса не могут переопределять поля суперкласса как, например, методы. В данном случае класс Derived скрывает поле name класса Base (JLS 8.3). Это корректно, но нерекомендуется, так как противоречит принципу Лискова: если что-то можно делать с базовым классом, то то же самое должно быть возможно делать с его потомком. Чтобы решить проблему с доступом к полю name класса base надо переписать код так:
public class PrivateMatter {
public static void main(String[] args) {
System.out.println(((Base) new Derived()).name);
}
}
Java Puzzle 65: A Strange Sage of a Suspicious Sort
Всю программу приводить не буду. Приведу пример неправильной реализации компаратора, из-за которого вся программа сортировки работает неправильно.
class IntegerComparator implements Comparator {
public int compare(Integer i1, Integer i2) {
return i2 - i1;
}
}
Идиома, лежащая в основе этой имплементации, известна с ранних дней UNIX (1970). Поэтому многие уже не помнят, а остальные не знают, решение этой проблемы. Помните, что компьютерная математика отличается от обычной. И при вычитании большого положительного числа из большого отрицательного числа можно получить положительное, а не отрицательное. Это называется - переполнение разрядной сетки...
Вот правильная имплементация:
class IntegerComparator implements Comparator {
public int compare(Integer i1, Integer i2) {
if (i1 > i2) return -1;
if (i1 < i2) return 1;
return 0;
}
}
После анализа кода становится ясно, что этот компаратор предназначен для сортировки в обратном порядке. Так что не надо городить своих классов. Используйте компаратор, входящий в состав библиотеки коллекций:
Collections.reverseOrder()
class IntegerComparator implements Comparator
public int compare(Integer i1, Integer i2) {
return i2 - i1;
}
}
Идиома, лежащая в основе этой имплементации, известна с ранних дней UNIX (1970). Поэтому многие уже не помнят, а остальные не знают, решение этой проблемы. Помните, что компьютерная математика отличается от обычной. И при вычитании большого положительного числа из большого отрицательного числа можно получить положительное, а не отрицательное. Это называется - переполнение разрядной сетки...
Вот правильная имплементация:
class IntegerComparator implements Comparator
public int compare(Integer i1, Integer i2) {
if (i1 > i2) return -1;
if (i1 < i2) return 1;
return 0;
}
}
После анализа кода становится ясно, что этот компаратор предназначен для сортировки в обратном порядке. Так что не надо городить своих классов. Используйте компаратор, входящий в состав библиотеки коллекций:
Collections.reverseOrder()
Подписаться на:
Сообщения (Atom)