Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Маленькие классы, Помощники 
:(
    Опции темы
LSD
Дата 17.1.2006, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15709
Регистрация: 24.3.2004

Репутация: 209
Всего: 537



Цитата(Zandr @ 17.1.2006, 11:57 Найти цитируемый пост)
По поводу комментов на русском языке... Нет комментов. Лично я против. Комменты на русском делайте к 1С Бухгалтерии.

Спокуха, без фанатизма smile
Я сам на работе бьюсь, за то чтобы коментарии к коду писались по английски (но меня все игнорируют). Но тут проблема вот в чем, мы русскоязычный форум, мы статьи в FAQ пишем по русски, мы в топиках отвечаем тоже по русски (что у нас бывает за транслит ты знаешь). Да многие из нас могут читать док на английском, так же легко как и на русском.
Но новички не могут. И многие просто не станут пользоваться этими классами, или продолжат задавать вопросы, просто потому, что не поняли комменариев.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
chief39
Дата 17.1.2006, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 15
Всего: 77



Цитата(LSD @ 17.1.2006, 13:19 Найти цитируемый пост)

Я сам на работе бьюсь, за то чтобы коментарии к коду писались по английски (но меня все игнорируют). Но тут проблема вот в чем, мы русскоязычный форум, мы статьи в FAQ пишем по русски, мы в топиках отвечаем тоже по русски (что у нас бывает за транслит ты знаешь). Да многие из нас могут читать док на английском, так же легко как и на русском.
Но новички не могут. И многие просто не станут пользоваться этими классами, или продолжат задавать вопросы, просто потому, что не поняли комменариев.

Джавадок - инглиш
+ перевод на русский отдельно( ой как лень всем будет... smile )
И отдельный счётчик под репутацией - опубликованное(факи/статьи/сорцы)
(Если кто реализует smile )

Lamer George и иже с ним(вобщем, кто баги форума устранял) - сенки за нормальное отображение и функциональность в ФФ smile



--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
batigoal
Дата 17.1.2006, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Цитата(chief39 @ 17.1.2006, 15:49 Найти цитируемый пост)

И отдельный счётчик под репутацией - опубликованное(факи/статьи/сорцы)

Имхо, рано пока. Репутации достаточно.

Цитата(chief39 @ 17.1.2006, 15:49 Найти цитируемый пост)

Lamer George и иже с ним(вобщем, кто баги форума устранял) - сенки

Я тут не причем, там ПХПисты и веб-мастера в основном работают.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
LSD
Дата 17.1.2006, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15709
Регистрация: 24.3.2004

Репутация: 209
Всего: 537



Итак предлагаю рыбу, для оформления классов.
====================8<==============================8<====================
Название: Генератор паролей
Тип: автономное приложение/библиотека
Язык: Java
Версия: 2.0
Версия JDK: 1.5
Требуемые библиотеки: нет
Автор: LSD
Примечания: код оформлен с использованием синтаксиса 1.5, но допускает переделку под более ранни версии JDK, вплоть до 1.1

1. Описание класса(ов)

Класс предназначен для генерации паролей, состоящих из указанного множества символов. Класс может работать, и как утилита командной строки, и как часть другого приложения.
Конструктор класса принимает в качестве аргумента, длинну пароля и набор символов для генрации пароля. Длинна должна быть больше нуля, а набор символов не пустой, иначе будет выброшено исключение. Сгенерировать пароль можно, или в виде строки или в виде массива символов.

Для запуска класса в версиях JDK ранее 1.5 надо:
  • заменить везде char[] ... characters на char[][] characters
  • заменить везде StringBuilder на StringBuffer
  • заменить ArrayList<char[]> list = new ArrayList<char[]>() на ArrayList list = new ArrayList(), PasswordGenerator pg = new PasswordGenerator(length, list.toArray(new char[list.size()][])) на PasswordGenerator pg = new PasswordGenerator(length, (char[][]) list.toArray(new char[list.size()][]))
  • для JDK ранее 1.2, в предыдущем пункте вместо ArrayList использовать Vector
2. Рекомендации по использованию, примеры

Класс рекомендуется к использованию, везде где надо задавать пароль пользователя. Лучше мы ему сгенерируем пароль, чем он нам введет qwerty или 123456 smile

Пример использования класса: сгенерируем два пароля. Простой 8 символов, только строчные латинские буквы. И сложный 16 символов, цифры, латинские буквы в нижнем и верхнем регистре.
Код
PasswordGenerator passGen = new PasswordGenerator(8, PasswordGenerator.LATIN_LOWERCASE);
String simplePassword = passGen.generateAsString();
passGen.setLength(16);
passGen.setSymbols(PasswordGenerator.LATIN_LOWERCASE, PasswordGenerator.LATIN_UPPERCASE, PasswordGenerator.DIGITS);
String complexPassword = passGen.generateAsString();


Пример использования из командной строки: сгенерируем 3 пароля длинны 8 состоящие из заглавных латинских букв и цифр.
Код
java PasswordGenerator -Cud -L8 -N3


3. Код, руководство по сборке

Код
/*
Password generator - class for generating passwords
Copyright (C) 2006 LSD

<здесь будет копилефт>

Vingrad Programmers Forum
WEB: http://forum.vingrad.ru/
e-mail: lsd (гав) vingrad.ru
*/
package ru.vingrad.utils;

import java.util.ArrayList;
import java.util.Random;

/**
 * Класс предназначенный для генерации паролей, указанной длинны и набором символов.
 * В классе реализован метод main(), чтобы его можно было использовать как утилиту
 * командной строки. Класс не потокобезопасный, при использовании в многопоточном
 * приложении, требуется внешняя синхронизация.
 */
public class PasswordGenerator
{
  /**
   * Предопределенная костанта для заглавных латинских букв
   */
  public static final char[] LATIN_UPPERCASE =
      {'A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' , 'H' , 'I' , 'J' , 'K' , 'L' , 'M' ,
       'N' , 'O' , 'P' , 'Q' , 'R' , 'S' , 'T' , 'U' , 'V' , 'W' , 'X' , 'Y' , 'Z'};

  /**
   * Предопределенная костанта для строчных латинских букв
   */
  public static final char[] LATIN_LOWERCASE =
      {'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'h' , 'i' , 'j' , 'k' , 'l' , 'm' ,
       'n' , 'o' , 'p' , 'q' , 'r' , 's' , 't' , 'u' , 'v' , 'w' , 'x' , 'y' , 'z'};

  /**
   * Предопределенная костанта для арабских цифр
   */
  public static final char[] DIGITS =
      {'0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9'};

  /**
   * Предопределенная костанта для спецсимволов
   */
  public static final char[] SYMBOLS =
      {'!' , '@' , '#' , '$' , '%' , '^' , '&' , '*' , '(' , ')' , '_' , '+' , '-' , '=' , '[' ,
       ']' , '{' , '}' , ';' , '\'' , ':' , '"' , ',' , '.' , '/' , '<' , '>' , '?' , '`' , '~'};

  /**
   * Массив содержащий множество символов из которых генерируется пароль
   */
  private char[] symbols;
  /**
   * Генератор случайных чисел
   */
  private Random rnd;
  /**
   * Длянна пароля
   */
  private int length;

  /**
   * Коструктор класса принимает в качестве аргумента длянну пароля и список массивов char[]
   * с набором символов для генерации пароля. Проверка на дублирование символов не производится.
   *
   * @param length     длинна пароля, должна быть больше нуля
   * @param characters список массивов char[] используемых для генерации пароля
   * @throws IllegalArgumentException если длинна отрицательная или ноль, или входное множество
   *                                  символов пустое
   */
  public PasswordGenerator(int length, char[] ... characters)
  {
    setLength(length);
    rnd = new Random();
    setSymbols(characters);
  }

  /**
   * Получить текущую длинну пароля используемую для генерации.
   *
   * @return длинна пароля
   */
  public int getLength()
  {
    return length;
  }

  /**
   * Установить текущую длинну пароля. Новые пароли будут указанной длинны.
   *
   * @param length
   * @throws IllegalArgumentException если длинна отряцательная или ноль
   */
  public void setLength(int length)
  {
    if(length <= 0)
      throw new IllegalArgumentException("Length mast be > 0");
    this.length = length;
  }

  /**
   * Возвращает набор символов используемых для генерации пароля.
   * @return массив содержащий символы используемые для генерации пароля
   */
  public char[] getSymbols()
  {
    return symbols;
  }

  /**
   * Задает набор символов используемых для генерации пароля.
   * @param characters список массиво символов
   * @throws IllegalArgumentException если результирующее множество символов пустое
   */
  public void setSymbols(char[] ... characters)
  {
    int i = 0;
    for(char[] ch : characters)
      i += ch.length;
    if(i <= 0)
      throw new IllegalArgumentException("Empty character set");
    symbols = new char[i];
    i = 0;
    for(char[] ch : characters)
    {
      System.arraycopy(ch, 0, symbols, i, ch.length);
      i += ch.length;
    }
  }

  /**
   * Сгенерировать новый пароль, в виде String.
   *
   * @return новый пароль
   */
  public String generateAsString()
  {
    StringBuilder buffer = new StringBuilder(length);
    for(int i = 0; i < length ; i++)
      buffer.append(symbols[rnd.nextInt(symbols.length)]);
    return buffer.toString();
  }

  /**
   * Сгенерировать новый пароль, в виде char[].
   *
   * @return новый пароль
   */
  public char[] generateAsCharArray()
  {
    char[] buffer = new char[length];
    for(int i = 0; i < length ; i++)
      buffer[i] = symbols[rnd.nextInt(symbols.length)];
    return buffer;
  }

  /**
   * Метод для генерации паролей из командной строки. Способ запуска:
   * java PasswordGenerator <ключи>
   * Где ключи:
   * <p/>
   * -C<символы> - задает использкемое множество символов
   * <символы> любой набор из:
   * L - латиница, нижний регистр
   * U - латиница, верхний регистр
   * D - цифры
   * S - спецсимволы
   * <p/>
   * -N<число> - задает количество генерируемых паролей
   * <p/>
   * -L<число> - задает длинну генерируемых паролей
   * <p/>
   * Все параметры не регистрозависимые, если како-то параметр опущен, то используется значение
   * по умолчанию. По умолчанию генерируется один пароль, состоящий из строчных латинских букв и
   * цифр, длинной 10 символов.
   *
   * @param args параметры запуска
   */
  public static void main(String[] args)
  {
    boolean useUppercase = false;
    boolean useLowercase = true;
    boolean useDigits = true;
    boolean useSymbols = false;
    int length = 10;
    int num = 1;
    for(String arg : args)
    {
      String larg = arg.toLowerCase();
      if(larg.startsWith("-c"))
      {
        useUppercase = larg.indexOf('u') != -1;
        useLowercase = larg.indexOf('l') != -1;
        useDigits = larg.indexOf('d') != -1;
        useSymbols = larg.indexOf('s') != -1;
      }
      else if(larg.startsWith("-n"))
      {
        try
        {
          num = Integer.parseInt(arg.substring(2));
          if(num < 0)
          {
            System.err.println("Invalid passwords count: " + num);
            System.exit(3);
          }
        }
        catch(NumberFormatException e)
        {
          System.err.println("Invalid number format '" + arg + "'");
          System.exit(2);
        }
      }
      else if(larg.startsWith("-l"))
      {
        try
        {
          length = Integer.parseInt(arg.substring(2));
          if(length <= 0)
          {
            System.err.println("Invalid password length: " + length);
            System.exit(3);
          }
        }
        catch(NumberFormatException e)
        {
          System.err.println("Invalid number format '" + arg + "'");
          System.exit(2);
        }
      }
      else
      {
        System.err.println("Unknown command line switch '" + arg + "'");
        System.exit(1);
      }
    }
    ArrayList<char[]> list = new ArrayList<char[]>();

    if(useUppercase)
      list.add(LATIN_UPPERCASE);
    if(useLowercase)
      list.add(LATIN_LOWERCASE);
    if(useDigits)
      list.add(DIGITS);
    if(useSymbols)
      list.add(SYMBOLS);

    PasswordGenerator pg = new PasswordGenerator(length, list.toArray(new char[list.size()][]));
    for(int i = 0; i < num ; i++)
      System.out.println(pg.generateAsString());
  }
}

====================8<==============================8<====================
Думаю заголовок надо жестко задать, и обязать всех к его обязательному заполнению. Только надо продумать его структуру.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
batigoal
Дата 17.1.2006, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Цитата(LSD @ 17.1.2006, 18:35 Найти цитируемый пост)

Версия: 2.0

Имхо, лишнее. Понадобится только в случае расширения на другие языки или, скажем, при указании версии ant, если это будет build.xml.

Многие ли будут задумываться об инструкции для даунгрейда под старые версии?

Это сообщение отредактировал(а) Lamer George - 17.1.2006, 17:48


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
LSD
Дата 17.1.2006, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15709
Регистрация: 24.3.2004

Репутация: 209
Всего: 537



Цитата(Lamer George @ 17.1.2006, 17:42 Найти цитируемый пост)
Имхо, лишнее. Понадобится только в случае расширения на другие языки или, скажем, при указании версии ant, если это будет build.xml.

Я его 2 раза переписывал, а об этом никто не узнает smile
Вдруг мы захотим хранить 2 версии, старую и доработанную (например выйдет Mustang и мы захотим доработать класс под него)?

Цитата(Lamer George @ 17.1.2006, 17:42 Найти цитируемый пост)
Многие ли будут задумываться об инструкции для даунгрейда под старые версии?

Не знаю, но я периодически получаю пинки из-за того что пишу под 1.5, т.к. основной сервак у нас под 1.4, поэтому и написал. Но если не актуально можно удалить.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
chief39
Дата 17.1.2006, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 15
Всего: 77



LSD, джавадок в англ. может всётки? smile
+ русский ещё куда-нить впихнуть smile

И это... когда писать будете свои классы... Кроме джавадока иногда приятно найти
комменты в некоторых строчках, которые позволяют целиком и полностью понять код в считанные секунды. ;)

Цитата(LSD @ 17.1.2006, 17:35 Найти цитируемый пост)

Версия: 2.0

ЗЫ! А ЦВС-сервер не того... не получится? smile
Хотя, наверное, не сейчас. Сначала понаписывать надо smile



--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
LSD
Дата 17.1.2006, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15709
Регистрация: 24.3.2004

Репутация: 209
Всего: 537



Цитата(chief39 @ 17.1.2006, 19:02 Найти цитируемый пост)
LSD, джавадок в англ. может всётки?

Легко, если кто нибудь это потом переведет на русский.

Цитата(chief39 @ 17.1.2006, 19:02 Найти цитируемый пост)
И это... когда писать будете свои классы...

Что значит будете, а ты сам что не участвуешь? smile


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
chief39
Дата 17.1.2006, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 15
Всего: 77



Цитата(LSD @ 17.1.2006, 19:14 Найти цитируемый пост)

Легко, если кто нибудь это потом переведет на русский.

Сам, всё сам. Пишешь джавадоку англ. Потом, смахнув пот с чела.... садишься... и ножками, ножками... но отдельно. Сугубо для ознакомления. Всё-таки, как ни крути, аглицкие кракозябры надо всем разбирать трошки хоть со словарём.

Цитата(LSD @ 17.1.2006, 19:14 Найти цитируемый пост)

Что значит будете, а ты сам что не участвуешь?

Буду-буду. Только разгружусь немножно. Исп. срок закончится, москвичам вета-верс отдадим - и сразу руки ослобонятся.
Я к тому чтоб все не забывали. Гораздо приятнее код читать. И понятнее. А иногда без таких комментов и не понять smile






--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
Stampede
Дата 17.1.2006, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 24
Всего: 144



Цитата(Zandr @ 17.1.2006, 11:57 Найти цитируемый пост)

По поводу закрытия файла... Наши американские коллеги писали что-то типа:


А мои американские коллеги писали еще круче:

Код

public String getName() {
    /* Returns the name property value. */
    if (fieldName == null) {
        try {
            fieldName = new String();
        } catch (Throwable exception) {
            System.err.println("Exception creating name property.");
        }
    };
    return fieldName;
}


И ведь тоже деньги получают, что характерно smile

PM WWW   Вверх
Stampede
Дата 17.1.2006, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 24
Всего: 144



LSD, молодец, все грамотно и пр., но у меня один вопрос:

Цитата(LSD @ 17.1.2006, 17:35 Найти цитируемый пост)

Код

     buffer.append(symbols[(int) (rnd.nextDouble() * symbols.length)]);



Зачем было делать промежуточные преобразования с double, когда можно было просто написать:

Код

     buffer.append(symbols[rnd.nextInt(len)]);


Ведь специально же в API предусмотрели такой метод:

Цитата

nextInt(int n)
          Returns a pseudorandom, uniformly distributed int value between 0 (inclusive) and the specified value (exclusive), drawn from this random number generator's sequence.

PM WWW   Вверх
LSD
Дата 18.1.2006, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15709
Регистрация: 24.3.2004

Репутация: 209
Всего: 537



Цитата(Stampede @ 17.1.2006, 21:50 Найти цитируемый пост)
LSD, молодец, все грамотно и пр., но у меня один вопрос:
...

Эээ...
Ну как бы тебе объяснить, дело в том что я этот метод не замечал просто. И все время удивлялся, почему его не предусмотрели.
Вообщем спасибо, что открыл глаза smile
Добавлено @ 00:31
Кстати, давайте пока не будем сильно увлекаться обсуждением классов. Лучше подумать над предложениями по поводу организации, этой подборки классов. Что стоит добавить, что удалить, правила оформления и т.д.

P.S. а если хотите посмеяться над ляпами программистов, зайдите в эту тему.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Stampede
Дата 18.1.2006, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 24
Всего: 144



Цитата(LSD @ 18.1.2006, 00:18 Найти цитируемый пост)

Вообщем спасибо, что открыл глаза


Я сам не так давно узнал об этом из книжки Блоха "Effective Java":

Цитата

109
Item 30: Know and use the libraries

Suppose you want to generate random integers between 0 and some upper bound. Faced with
this common task, many programmers would write a little method that looks something like
this:

Код

static Random rnd = new Random();
// Common but flawed!
static int random(int n) {
return Math.abs(rnd.nextInt()) % n;
}


This method isn't bad, but it isn't perfect, either—it has three flaws. The first flaw is that if n is
a small power of two, the sequence of random numbers it generates will repeat itself after
a fairly short period. The second flaw is that if n is not a power of two, some numbers will, on
average, be returned more frequently than others. If n is large, this flaw can be quite
pronounced. This is graphically demonstrated by the following program, which generates
a million random numbers in a carefully chosen range and then prints out how many of
the numbers fell in the lower half of the range:

Код

public static void main(String[] args) {
int n = 2 * (Integer.MAX_VALUE / 3);
int low = 0;
for (int i = 0; i < 1000000; i++)
if (random(n) < n/2)
low++;
System.out.println(low);
}


If the random method worked properly, the program would print a number close to half
a million, but if you run it, you'll find that it prints a number close to 666,666. Two thirds of
the numbers generated by the random method fall in the lower half of its range!

The third flaw in the random method is that it can, on rare occasion, fail catastrophically,
returning a number outside the specified range. This is so because the method attempts to map
the value returned by rnd.nextInt() into a nonnegative integer with Math.abs. If
nextInt() returns Integer.MIN_VALUE, Math.abs will also return Integer.MIN_VALUE, and
the remainder operator (%) will return a negative number, assuming n is not a power of two.
This will almost certainly cause your program to fail, and the failure may be difficult to
reproduce.

To write a version of random that corrects these three flaws, you'd have to know a fair amount
about linear congruential pseudorandom number generators, number theory, and two's
complement arithmetic. Luckily, you don't have to do this—it's already been done for you. It's
called Random.nextInt(int), and it was added to the standard library package java.util in
release 1.2.


Вообще, очень правильная книжка, абсолютно обязательная для любого, кто пишет APIs. И как я раньше о ней не знал?

ЗЫ. Выложу-ка я ее ненадолго. Авось, моего трафика сильно не убудет. Через недельку уберу. Качать отсюда: http://real-english.ru/data/bloch.zip. Энджойте smile
PM WWW   Вверх
chief39
Дата 18.1.2006, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 15
Всего: 77



Цитата(LSD @ 18.1.2006, 00:18 Найти цитируемый пост)

Эээ...
Ну как бы тебе объяснить, дело в том что я этот метод не замечал просто. И все время удивлялся, почему его не предусмотрели.

Те же яйца, вид сбоку!!! Идея в дропдауне отображает только nextInt(). (Интересно, почему?)
Ну а в исходники никто, понятное дело, не лазил... smile
Добавлено @ 12:26

ЗЫ: я надеюсь, эту тему потом подчистят от спама? smile

Это сообщение отредактировал(а) chief39 - 18.1.2006, 12:27


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
LSD
Дата 18.1.2006, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15709
Регистрация: 24.3.2004

Репутация: 209
Всего: 537



Цитата(chief39 @ 18.1.2006, 12:26 Найти цитируемый пост)
ЗЫ: я надеюсь, эту тему потом подчистят от спама?

Да.
А спаммеров, забаним smile


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1986 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.