Задаю вопросики по java. Я ,новичёк в java. Просьба забегайте ко мне в тему по-чаще,пишу новые вопросы,продолжая тему.
PS. Очень не хочется плодить кучу тем под каждый вопрос,но в старую тему почти никто не заходит,а открывая новую, ответ почти сразу же. не нужно читать всю тему, просто прочтите последний пост, если последний мой вопрос - жду ответа(если есть желаете помочь,заставить мы тут никого не можем=)).
Сообщение отредактировал kol9mbo - Суббота, 18 Июля 2015, 18:57
Привет. Ошибок в твоем коде просто куча Сейчас со всем разберемся.
Для начала к главному. Ты немного неправильно понимаешь действие функции ArrayList.indexOf(String string); эта функция, как аргумент, принимает строку(!) ищет в ArrayList похожую строку и возвращает ее номер. Ты же берешь значение поля pole2 и превращаешь его в Integer (этого делать не надо, indexOf принимает String и ищет похожее значение, когда ты превращаешь строку в число, ты не только создаешь риск Exception'а, но и убиваешь значение строки).
Если более кратко, то вот этот код действия по нажатию на кнопку проверки:
Ибо ничего превращать в Integer не надо! Про остальное добавлю, нужно отойти мне
Добавлено (22 июня 2015, 13:47) --------------------------------------------- Далее, использование цикла каждый раз для подсчета количества элементов в Листе, это максимально неэффективно, да еще и к тому же дает неверный ответ.
Код
for (int i = 0;i<list.size() ; i++) { metka.setText("Всего записано:"+i);} }
Этим куском кода ты каждый раз устанавливаешь i, в конечном счете, равное последнему индексу листа. Это неверно, потому что отсчет индексов листа идет от 0. Следовательно к твоей "длине" для достижения верного значения надо прибавлять единицу. Да и вообще этот метод кощунство, проще просто заменить весь кусок на
Код
metka.setText("Всего записано: "+list.size());
И еще один такой неэффективный метод выставления количества при удалении всего списка Вот твой код:
Лично мне очевидно, что после удаления всего списка, количество записанных элементов стало равно 0. Следовательно, для повышения эффективности избавимся от вызова еще одного метода:
Код
list.clear(); metka.setText("Всего записано 0");
И последнее. Твоя проверка не работала, потому что она непонятно что делала. У тебя было:
Код
System.out.println(list.get(0));
Ты выводил в стринговое значение 0 элеменета. Но оно и так известно потому что ты только что его записал. Я полагаю, тебе нужно было это:
Наверно не ИндексОф вообще нужно, просто у меня в голове такая путаница, сложно еще новичку.
Проверка у меня была,только для понимания,собственного(правильно ли пишу ,команду итд). Насчет счета с нуля, я в курсе,просто это лишняя задача, которую решать нужно было б, после работы основного функционала. счет Листа 0 1 2 3 4 , т.е. 0 -наше первое значение.
Как сделать так ,чтоб доставалось значение(в метку),которое записано под индексом, который я введу в поле...
PS без примеров голой теорий сложно разобраться,поэтому вот,частые глупые вопросы) вроде бы изложенные в теории,но до сель не понятные мне. Больше практики -больше опыта,меньше неэффективного кода итд.
это грубо и не верно, я имею ввиду, почему нужно создавать еще 1 стринг и ровнять его стрингу в поле2 , а нельзя просто записать ,чтоб читал стринг с поле2. пока писал допер....
-только ругается=) list.get(index)-достанет мне значение ячейки(индекс).Верно? Получается мне нужно вернуть значение ,которое записано в ячейке(Индекс x), где x будет взято из текста поля2
Сообщение отредактировал kol9mbo - Понедельник, 22 Июня 2015, 14:48
Все верно! Так сделать можно, и в данной ситуации это лучший вариант. Я вынес в отдельную переменную, создавая гибкость кода (то есть в будущем при расщирении функционала программы с моей переменной можно будет проводить промежуточные действия, добавляя новые функции). Ну а с точки зрения производительности мой и твой вариант абсолютно равносильны. Функция getText() в обоих случаях создает новый объект (то есть оперативная память выделяется), только я в своем случае сохраняю локальный указатель на эту память (объект String), чтобы потом с ним что-нибудь сделать.
На счет первого вопроса: Если тебе нужно по индексу найти значение, тогда ты правильно делал, когда из String делал Integer Только вот вместо метода indexOf тебе нужно использовать метод List.get(int i); То етсь:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at arrayListTest$3.actionPerformed(arrayListTest.java:56) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$500(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)
вот такая вот ошибка:(
Сообщение отредактировал kol9mbo - Понедельник, 22 Июня 2015, 18:15
kol9mbo, с каким кодом? Моим? Странно, что я там успел накосячить. Можно весь код посмотреть? (Именно тот, который ты компилируешь) И да, кратко по ошибке: это исключение, говорящее о том, что ты где-то в программе пытаешься вызвать метод у объекта который не объявлен. Проверь, все ли у тебя переменные объявлены, ни одной не присвоено значение null. А вообще NullPointerException это типичное исключение, которое можно перехватить и отладить. Про исключения читай тут.
String strpole2=pole2.getText(); Integer strpole2int =Integer.getInteger(strpole2); metka2.setText("выбранное="+list.get(strpole2int)); /* String strpole2=pole2.getText(); Integer strpole2int =Integer.getInteger(strpole2); metka2.setText("Выбранное = "+list.indexOf(strpole2)); // выдает номер ячейки по значению.(вводим значение -он показывает в какой ячейке это значение) } */ } }); System.out.println(list.get(0)); //проверка okno.add(metka); okno.add(del); okno.add(proverka); okno.add(pole2); okno.add(metka2); okno.setVisible(true);
} }
сейчас код такой у меня, ну все твои правки внесены... ошибка пишет в 57 строке. пока не разобрался. всё вроде обьявлено ошибка происходит во время нажатия на кнопочку проверки
Сообщение отредактировал kol9mbo - Понедельник, 22 Июня 2015, 19:44
Ошибка очень странная. Вся проблема в мтоде Integer.getInteger(String str) этот метод почему-то возвращает null. Я, честно говоря, не знаю почему. Возможно кто-то поумнее меня найдется и ответит на этот вопрос. Я лишь могу рекоменовать не использовать этот метод (я никогда его не использую), есть другой более безотказный метод Integer.parseInt(String str)
Добавлено (22 июня 2015, 20:24) --------------------------------------------- Главное теперь предусмотреть, чтобы в текстовое поле ничего кроме цифр не вводили.
kol9mbo, ну непосредственно при программировании игр это делается с опорой на FPS. Вычисляется разница во времени (delta) между соседними кадрами, эта разница каждый раз прибавляется переменной и когда значения переменной становится равно минуте (в неких единицах), срабатывает некое событие и переменная обнуляется, все начинается сначала.
Более универсальный способ: В момент запуска приложения вызываешь System.currentTimeMillis(); этот метод вернет тебе переменную типа long, содержащую текущее время в милисекундах, записываешь ее куда нибудь. После этого каждую итерацию цикла (некого цикла в твоей программе в котором происходит все) вновь вызываешь System.currentTimeMillis() и из нового значение вычитаешь начальное. Когда разница становится равна 60000 (1000 миллисекунд равна 1 секунде) значит прошла минута.
В сущности оба метода одинаковы, потому что основаны на одинаковых принципах (Вычисления разницы во времени).
Вот пример кода, как это реализовывать, код писал прямо сейчас в строке ввода pstebin, поэтому ни разу не отлаживал. Код может содержать мелкие синтаксические ошибки, по той же причине. Код здесь
в фрейм лейбл запишет 0... а не 99.тк изначально в поле не задано значение. как можно сделать так чтоб, записалось в поле вычисленное значение? уже голова вскипела =)))не соображаю))))
а в самом классе"вычисления между 1 и 2" пишу System.out.println(itog); выдает вычисленное(99) направьте на путь истинный=)
Сообщение отредактировал kol9mbo - Суббота, 18 Июля 2015, 18:12
там никто не отвечает, раз в неделю если ответят- алилуя. Ждал, тогда не 1 день ,а создав "новую"тут же ответили... не айс,не красиво,но действенно.Создав -эту тему, получил сразу ответы, потом я ушел в самообучение, появились вопросы,пишу снова ,в ней,изменив шапку
Сообщение отредактировал kol9mbo - Суббота, 18 Июля 2015, 19:50