Вниз  Микростатьи и хитрости Java
- 20.06.2010 / 14:01
web_demon
  Супервизор

web_demon 
Сейчас: Offline
Поместил почти все статьи в вики
http://annimon.com/wikimobile/?id=mobileprograming:j2me

Изменено aNNiMON (4.01 / 18:55) (всего 1 раз)
- 21.06.2010 / 00:56
Король@
  Пользователь

Король@ 
Сейчас: Offline
Zvers, на твой пост (20.06.2010 / 13:34) отвечу, Немного дополню. Операция XOR является обратной.
Если
A ^ B = C
то
C ^ B будет равно A также как и C ^ A будет равно B. Это свойство можно использовать для создания шифров.
- 1.07.2010 / 10:16
Король@
  Пользователь

Король@ 
Сейчас: Offline
Простой способ "правильного" округления дробей до целого:

  1. Math.floor(decimal + 0.5);


Изменено iFone (26.08 / 07:44) (всего 1 раз)
- 10.08.2010 / 21:06
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Использование векторов (Vector)
Допустим перед нами лежит задача - во введенной пользователем строке, занести все слова в массив. Казалось, что может быть проще - создал массив, и записываешь в него все буквы, пока не встретится пробел. Но не тут то было. Ведь заведомо неизвестно, сколько будет слов в строке, а значит мы не знаем какой размерности создавать массив. Конечно можно исхитриться, и сначала подсчитать количество пробелов, а потом создать массив размерностью num_of_spaces + 1. Но это много лишнего и ненужного кода. Вот тут то на помощь нам и приходит вектор.
  Вектор, это некий контейнер для любых объектов. От массива он отличается во-первых тем, что не имеет типа. То есть в него можно положить как числа, строки, так и классы или любые другие объекты. Вторым отличием является его безразмерность, то есть не нужно заранее указывать размер вектора.
  Чтобы использовать вектор, нужно импортировать класс java.util.Vector;
После этого можно инициализировать вектор. Делается это также, как и в случае с классами:
Vector v = new Vector();
Всё. После этого можно использовать наш вектор в необходимых целях.
Чтобы добавить в него что-то, используем метод: v.addElement(Object o);
Чтобы извлечь, используем метод: v.elementAt(int num);
Но к нему я вернусь позже.
Итак, перед нами задача - положить слова из строки в массив.
  1. public String[] getWords(String text) {
  2. Vector v = new Vector();
  3. String temp = "";//промежуточная строка, будет собирать слово
  4. int len = text.length();
  5. for(int i = 0; i < len; i++) {
  6.  int ch = text.charAt(i);//это наш символ в тексте
  7.  if((ch == ' ') && // если встретился пробел
  8.    (temp.length() > 0)) { //и в промежуточной строке есть слово
  9.   v.addElement(text);// то заносим его в вектор
  10.   temp = ""; // и делаем строку пустой
  11. } else temp = temp + String.valueOf((char) ch); // если не пробел, то добавляем его к слову
  12. }
  13. // Добавляем последнее слово
  14. if (temp.length() > 0)  v.addElement(text);
  15. /* Вот теперь в наш вектор
  16. помещены все слова,
  17. но, поскольку наша задача вывести массив,
  18. то воспользуемся одной хорошей функцией */
  19. int size = v.size();//мы знаем сколько элементов в векторе
  20. String[] out = new String[size]; // значит без труда создаем массив
  21. v.copyInto(out); // и перегоняем содержимое вектора в массив
  22. // Теперь всё что остается это
  23.  return out;
  24. }
Вот и всё. Здесь нет ничего сложного. Но один момент мы всё же не разобрали - как обстоят дела с получением объекта из вектора.
На секунду представим, что про метод copyInto мы ничего не знаем, поэтому переведем данные вручную:
for (int i = 0; i < size; i++) {
  out[i] = (String) v.elementAt(i);
}
Объясню зачем нужно это "(String)". Всё дело в том, что метод elementAt(int) возвращает объект, а не тот тип, который был положен. Поэтому без преобразования здесь не обойтись. Если мы ложили Integer, то нужно получать его так: Integer d = (Integer) v.elementAt(i);
Более подробно о том или ином методе класса Vector, можно почитать в доках
__________________
 let live

Изменено aNNiMON (15.08 / 10:33) (всего 2 раза)
- 11.08.2010 / 15:01
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Описалово методов
__________________
 let live


Прикрепленные файлы:
opisalovo_metod(…).zip (8.83 кб.) Скачано 274 раза
- 13.08.2010 / 01:10
ShadowPrince
  Пользователь

ShadowPrince 
Сейчас: Offline
Простой метод анимации нажатия софт клавиш.
Для начала обьявляем 3 булевых переменных, пусть это будут
  1. private boolean lsp, rsp, csp;
.
Их true будет обозначать нажатость клавиши.
Рисуем.
  1. g.setColor(0);
  2. if (lsp) g.setColor(0xff0000)
  3. g.drawString("Left Soft Key", 0, h, g.BOTTOM|g.LEFT);
И так для каждого софта.
Вся фишка в том, что все действия выполняются в методе keyReleased():
  1. public void keyPressed(int keyCode){
  2. if (keyCode==-6) lsp = true;
  3. if (keyCode==-7) rsp = true;
  4. if (keyCode==-5) csp = true;
  5. }
  6. public void keyReleased(int keyCode){
  7. if (keyCode==-6){ lsp = false;
  8. /*Действия*/}
  9. if (keyCode==-7) {rsp = false;
  10. /*Действия*/}
  11. if (keyCode==-5) {csp = false;
  12. /*Действия*/
  13. }
  14. }
Огромный плюс метода - не нужно лопатить всю прогу, а только добавить рисовку и переменные, а также поменять методы местами.

© ShadowPrince
- 13.08.2010 / 09:29
aleksey
  Пользователь

aleksey 
Сейчас: Offline
ShadowPrince (13.08.2010/01:10)
Простой метод анимации нажатия софт клавиш.Для начала обьявляем 3 булевых переменных, пусть это будут
Лучше вместо трёх булевых одну integer переменную. Например левый софт, если переменная равна 1, правый - 2 и т.д.
А в методе keyReleased приравнять эту переменную например к нулю и тогда сбросятся сразу все клавиши и не надо будет писать тонны кода :)
- 13.08.2010 / 09:44
LPzhelud
  Пользователь

LPzhelud 
Сейчас: Offline
aleksey (13.08.2010/09:29)
Лучше вместо трёх булевых одну integer переменную. Например левый софт, если переменная равна 1, правый - 2 и т.д.А в методе keyReleased приравнять эту переменную например к нулю и тогда сбросятся сра
тогда уж лучше байт переменную и оперировать с флагами. На самом деле непонята полезность кода, приведенного выше. Вероятно, автор только узнал о keyReleased. Но вообще то, читаем последнее предложение первого поста
__________________
 Эль Презеденте
- 21.08.2010 / 17:10
LPzhelud
  Пользователь

LPzhelud 
Сейчас: Offline
обмен значений между переменными без использования третьей:
  1. a = a + b;
  2. b = a - b;
  3. а = a - b;

__________________
 Эль Презеденте

Изменено LPzhelud (2.10 / 17:01) (всего 2 раза)
- 21.08.2010 / 18:00
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
LPzhelud, Знаю этот способ, но он может привести к переполнению стека при работе с большими числами.
__________________
 let live
Наверх  Всего сообщений: 83
Фильтровать сообщения
Поиск по теме
Файлы топика (6)