Вы, кажется, неправильно поняли, что означает distance = e - o
. Это не значит, что distance
будет меняться в зависимости от e
и o
. Это просто означает, что все значения e
и o
, которые хранятся в данный момент, используются для вычисления значения distance
, и distance
будет иметь то же значение, пока вы его не измените. Изменение e
или o
после этой строки не влияет на distance
. Следовательно, distance
всегда будет -1.
Вы также, кажется, используете вложенные циклы. Это не нужно здесь. Вот общий алгоритм:
for each element x in the array
if x is odd then
record x's position in y
if an odd number has been found and x is even then
return x's position minus y
А вот код:
public static int oddEven(int[] numbers) {
int oddPosition = -1;
for (int i = 0 ; i < numbers.length ; i++) {
if (numbers[i] % 2 == 1) {
oddPosition = i;
}
if (oddPosition != -1 && numbers[i] % 2 == 0) {
return i - oddPosition;
}
}
return -1;
}
Основной шаблон для такого рода вещей:
иметь поток, выполняющий цикл, который обновляет переменную (например, индекс кадра анимированного изображения), а затем вызывает invalidate для Поле, которое рисует изображение (а затем спит в течение определенного периода времени). Недействительный объект поставит в очередь перерисовку поля.
В методе рисования поля прочитайте переменную и нарисуйте соответствующий кадр изображения.
Псевдокод (не полностью полный, но чтобы дать вам идею):
public class AnimatedImageField extends Field implements Runnable {
private int currentFrame;
private Bitmap[] animationFrames;
public void run() {
while(true) {
currentFrame = (currentFrame + 1) % animationFrames.length;
invalidate();
Thread.sleep(100);
}
}
protected void paint(Graphics g) {
g.drawBitmap(0, 0, imageWidth, imageHeight, animationFrames[currentFrame], 0, 0);
}
}
Также обратите внимание, что здесь я использовал массив растровых изображений, но EncodedImage позволяет обрабатывать анимированный GIF как один объект и включает методы для получения определенных кадров.
РЕДАКТИРОВАТЬ: Для полноты: добавьте это в PopupScreen (как в ответе Фермина ) или создайте свой собственный диалог, переопределив Screen напрямую. и будет обрабатываться так, как если бы add_header ()
вызывался с каждым ключом и значением в качестве аргументов. Это часто используется для «подмены» заголовка User-Agent
, который используется браузером для идентификации себя - некоторые HTTP-серверы разрешают запросы, поступающие только от общих браузеров, в отличие от сценариев. Например, Mozilla Firefox может идентифицировать себя как «Mozilla / 5.0 (X11; U; Linux i686) Gecko / 20071127 Firefox / 2.0.0.11»
, тогда как urllib2
является пользовательским агентом по умолчанию строка "Python-urllib / 2.6"
(на Python 2.6).
Я ответил на аналогичный вопрос пару недель назад.
В этом вопросе есть пример кода, но в основном вы можете сделать что-то вроде это: (Обратите внимание на использование заглавных букв User-Agent
по состоянию на RFC 2616 , раздел 14.43.)
opener = urllib2.build_opener()
opener.addheaders = [('User-Agent', 'Mozilla/5.0')]
response = opener.open('http://www.stackoverflow.com')