Вторник, 26 Ноября 2024, 11:27

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Новичёк и Java.
kol9mboДата: Понедельник, 22 Июня 2015, 11:32 | Сообщение # 1
был не раз
Сейчас нет на сайте
Задаю вопросики по java.
Я ,новичёк в java.
Просьба забегайте ко мне в тему по-чаще,пишу новые вопросы,продолжая тему.


PS. Очень не хочется плодить кучу тем под каждый вопрос,но в старую тему почти никто не заходит,а открывая новую, ответ почти сразу же.
не нужно читать всю тему, просто прочтите последний пост, если последний мой вопрос - жду ответа(если есть желаете помочь,заставить мы тут никого не можем=)).
online2long


Сообщение отредактировал kol9mbo - Суббота, 18 Июля 2015, 18:57
RemmintanДата: Понедельник, 22 Июня 2015, 13:47 | Сообщение # 2
почетный гость
Сейчас нет на сайте
Привет. Ошибок в твоем коде просто куча biggrin Сейчас со всем разберемся.

Для начала к главному. Ты немного неправильно понимаешь действие функции ArrayList.indexOf(String string); эта функция, как аргумент, принимает строку(!) ищет в ArrayList похожую строку и возвращает ее номер. Ты же берешь значение поля pole2 и превращаешь его в Integer (этого делать не надо, indexOf принимает String и ищет похожее значение, когда ты превращаешь строку в число, ты не только создаешь риск Exception'а, но и убиваешь значение строки).

Если более кратко, то вот этот код действия по нажатию на кнопку проверки:
Код
String strpole2=pole2.getText();      
Integer strpole2int =Integer.getInteger(strpole2);
metka2.setText("выбранное="+list.indexOf(strpole2int));

Надо заменить на этот:
Код
String strpole2=pole2.getText();      
metka2.setText("выбранное="+list.indexOf(strpole2));

Ибо ничего превращать в Integer не надо!
Про остальное добавлю, нужно отойти мне

Добавлено (22 июня 2015, 13:47)
---------------------------------------------
Далее, использование цикла каждый раз для подсчета количества элементов в Листе, это максимально неэффективно, да еще и к тому же дает неверный ответ.
Код
for (int i = 0;i<list.size() ; i++) {      
           metka.setText("Всего записано:"+i);}      
}

Этим куском кода ты каждый раз устанавливаешь i, в конечном счете, равное последнему индексу листа. Это неверно, потому что отсчет индексов листа идет от 0. Следовательно к твоей "длине" для достижения верного значения надо прибавлять единицу. Да и вообще этот метод кощунство, проще просто заменить весь кусок на
Код
metka.setText("Всего записано: "+list.size());

И еще один такой неэффективный метод выставления количества при удалении всего списка
Вот твой код:
Код
list.clear();      
metka.setText("Всего записано"+list.size());

Лично мне очевидно, что после удаления всего списка, количество записанных элементов стало равно 0. Следовательно, для повышения эффективности избавимся от вызова еще одного метода:
Код
list.clear();
metka.setText("Всего записано 0");


И последнее. Твоя проверка не работала, потому что она непонятно что делала.
У тебя было:
Код
System.out.println(list.get(0));

Ты выводил в стринговое значение 0 элеменета. Но оно и так известно потому что ты только что его записал.
Я полагаю, тебе нужно было это:
Код
System.out.println(list.indexOf("Значение изначально"));

На этом вроде все, скоро выложу весь исправленный код ан Pastebin. Удачи в обучении!


Сообщение отредактировал Remmintan - Понедельник, 22 Июня 2015, 13:53
kol9mboДата: Понедельник, 22 Июня 2015, 14:12 | Сообщение # 3
был не раз
Сейчас нет на сайте
спасибо , на исправлениях,будем осознавать))).

Наверно не ИндексОф вообще нужно, просто у меня в голове такая путаница, сложно еще новичку.

Проверка у меня была,только для понимания,собственного(правильно ли пишу ,команду итд).
Насчет счета с нуля, я в курсе,просто это лишняя задача, которую решать нужно было б, после работы основного функционала.
счет Листа 0 1 2 3 4 , т.е. 0 -наше первое значение.

Как сделать так ,чтоб доставалось значение(в метку),которое записано под индексом, который я введу в поле...

PS без примеров голой теорий сложно разобраться,поэтому вот,частые глупые вопросы) вроде бы изложенные в теории,но до сель не понятные мне. Больше практики -больше опыта,меньше неэффективного кода итд.

еще вопросик


Сообщение отредактировал kol9mbo - Понедельник, 22 Июня 2015, 14:48
RemmintanДата: Понедельник, 22 Июня 2015, 14:49 | Сообщение # 4
почетный гость
Сейчас нет на сайте
Цитата kol9mbo ()
metka2.setText("выбранное="+list.indexOf(pole2.getText()));

Все верно! Так сделать можно, и в данной ситуации это лучший вариант. Я вынес в отдельную переменную, создавая гибкость кода (то есть в будущем при расщирении функционала программы с моей переменной можно будет проводить промежуточные действия, добавляя новые функции). Ну а с точки зрения производительности мой и твой вариант абсолютно равносильны. Функция getText() в обоих случаях создает новый объект (то есть оперативная память выделяется), только я в своем случае сохраняю локальный указатель на эту память (объект String), чтобы потом с ним что-нибудь сделать.

На счет первого вопроса:
Если тебе нужно по индексу найти значение, тогда ты правильно делал, когда из String делал Integer
Только вот вместо метода indexOf тебе нужно использовать метод List.get(int i);
То етсь:
Код
String strpole2=pole2.getText();     
Integer strpole2int =Integer.getInteger(strpole2);
metka2.setText("выбранное="+list.get(strpole2int));


Добавлено (22 июня 2015, 14:49)
---------------------------------------------
Я понимаю, что этот код уже не актуален, но вот код к первому посту:
код

Чтобы добить его до конца, нужно просто исправить list.indexOf на list.get в коде проверки


Сообщение отредактировал Remmintan - Понедельник, 22 Июня 2015, 14:51
kol9mboДата: Понедельник, 22 Июня 2015, 18:08 | Сообщение # 5
был не раз
Сейчас нет на сайте
с этим кодом выдает ошибку....я так пробовал,думал гет или еще чего не верно...
Код
String strpole2=pole2.getText();        
Integer strpole2int =Integer.getInteger(strpole2);    
metka2.setText("выбранное="+list.get(strpole2int));


вот такая вот ошибка:(


Сообщение отредактировал kol9mbo - Понедельник, 22 Июня 2015, 18:15
RemmintanДата: Понедельник, 22 Июня 2015, 18:57 | Сообщение # 6
почетный гость
Сейчас нет на сайте
kol9mbo, с каким кодом? Моим? Странно, что я там успел накосячить. Можно весь код посмотреть? (Именно тот, который ты компилируешь)
И да, кратко по ошибке: это исключение, говорящее о том, что ты где-то в программе пытаешься вызвать метод у объекта который не объявлен. Проверь, все ли у тебя переменные объявлены, ни одной не присвоено значение null.
А вообще NullPointerException это типичное исключение, которое можно перехватить и отладить. Про исключения читай тут.
kol9mboДата: Понедельник, 22 Июня 2015, 19:40 | Сообщение # 7
был не раз
Сейчас нет на сайте


сейчас код такой у меня, ну все твои правки внесены... ошибка пишет в 57 строке. пока не разобрался. всё вроде обьявлено
ошибка происходит во время нажатия на кнопочку проверки


Сообщение отредактировал kol9mbo - Понедельник, 22 Июня 2015, 19:44
RemmintanДата: Понедельник, 22 Июня 2015, 20:24 | Сообщение # 8
почетный гость
Сейчас нет на сайте
Ошибка очень странная. Вся проблема в мтоде Integer.getInteger(String str) этот метод почему-то возвращает null. Я, честно говоря, не знаю почему. Возможно кто-то поумнее меня найдется и ответит на этот вопрос. Я лишь могу рекоменовать не использовать этот метод (я никогда его не использую), есть другой более безотказный метод Integer.parseInt(String str)

Тоесть эту строчку:
Код
Integer strpole2int =Integer.getInteger(strpole2);

надо заменить на эту:
Код
Integer strpole2int = Integer.parseInt(strpole2);  

Добавлено (22 июня 2015, 20:24)
---------------------------------------------
Главное теперь предусмотреть, чтобы в текстовое поле ничего кроме цифр не вводили.

kol9mboДата: Понедельник, 22 Июня 2015, 21:41 | Сообщение # 9
был не раз
Сейчас нет на сайте
можно привести лёгкий пример? того,как каждые "Х"времени ,с переменной делалось заданное(постоянно/циклично). Скажем переменная "i" каждую минуту+1.

нужно делать только через Timer? или есть другой способ?

PS чем больше изучаю, тем больше теряюсь)))


Сообщение отредактировал kol9mbo - Четверг, 02 Июля 2015, 00:12
RemmintanДата: Суббота, 04 Июля 2015, 17:27 | Сообщение # 10
почетный гость
Сейчас нет на сайте
kol9mbo, ну непосредственно при программировании игр это делается с опорой на FPS. Вычисляется разница во времени (delta) между соседними кадрами, эта разница каждый раз прибавляется переменной и когда значения переменной становится равно минуте (в неких единицах), срабатывает некое событие и переменная обнуляется, все начинается сначала.

Более универсальный способ:
В момент запуска приложения вызываешь System.currentTimeMillis(); этот метод вернет тебе переменную типа long, содержащую текущее время в милисекундах, записываешь ее куда нибудь. После этого каждую итерацию цикла (некого цикла в твоей программе в котором происходит все) вновь вызываешь System.currentTimeMillis() и из нового значение вычитаешь начальное. Когда разница становится равна 60000 (1000 миллисекунд равна 1 секунде) значит прошла минута.

В сущности оба метода одинаковы, потому что основаны на одинаковых принципах (Вычисления разницы во времени).

Вот пример кода, как это реализовывать, код писал прямо сейчас в строке ввода pstebin, поэтому ни разу не отлаживал. Код может содержать мелкие синтаксические ошибки, по той же причине.
Код здесь
kol9mboДата: Суббота, 18 Июля 2015, 16:00 | Сообщение # 11
был не раз
Сейчас нет на сайте
в фрейм лейбл запишет 0... а не 99.тк изначально в поле не задано значение.
как можно сделать так чтоб, записалось в поле вычисленное значение?
уже голова вскипела =)))не соображаю))))


а в самом классе"вычисления между 1 и 2" пишу System.out.println(itog); выдает вычисленное(99)
направьте на путь истинный=)


Сообщение отредактировал kol9mbo - Суббота, 18 Июля 2015, 18:12
JackNazaryanДата: Суббота, 18 Июля 2015, 19:31 | Сообщение # 12
старожил
Сейчас нет на сайте
kol9mbo, зачем такую тему создавать? Есть специально заточенная под это.
kol9mboДата: Суббота, 18 Июля 2015, 19:48 | Сообщение # 13
был не раз
Сейчас нет на сайте
там никто не отвечает, раз в неделю если ответят- алилуя. Ждал, тогда не 1 день ,а создав "новую"тут же ответили... не айс,не красиво,но действенно.Создав -эту тему, получил сразу ответы, потом я ушел в самообучение, появились вопросы,пишу снова ,в ней,изменив шапку

Сообщение отредактировал kol9mbo - Суббота, 18 Июля 2015, 19:50
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг