![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Ybr |
|
||||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 4.3.2010 Где: Москва Репутация: нет Всего: нет |
Здравствуйте!
Задание: дан файл, содержащий Фамилию, Имя человека (инициалы) и список книг, закрепленных за этим человеком. Необходимо вывести содержимое файла на консоль (это часть моего задания. Та часть, которая вызвала проблему). Код:
(проблемный код я выделили цветом) Содержимое файла БД.txt:
(На всякие вспомогательные символы не обращайте, пожалуйста, внимания) Вывод программы:
Я имею пока очень мало опыта в JAVA, поэтому в нижеследующих рассуждениях у меня нет полной уверенности. В общем, в строке
Выводится только что считанная из файла строка (назовем ее Строка1). Далее идет закоментенный блок. Я сделал это намеренно, для чистоты эксперимента. После закомменченного блока идет строчка:
То, что выводит эта строка, назовем Строка2. Скажите мне, пожалуйста, каким образом программе удается вывести что-то, отличное от Строки1?? Между Строка1 и Строка2 не происходит ровным счетом НИКАКИХ действий, однако переменной s каким-то образом удается измениться. Она приписывает к себе из ниоткуда следующую строку из файла. Ту самую, которая еще не считана!! Как это происходит? Где я ошибся? Буду рад любому ответу. |
||||||||||
|
|||||||||||
| casey |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 20.12.2006 Где: Украина Репутация: 1 Всего: 2 |
Нет ничего удивительного, если учесть,что
- выводит строку s + символ перевода строки (\n)
- выводит ту же строку s (без символа новой строки) и после этого присваивает sub_s пустое значение по ходу правильно будет так:
|
||||||
|
|||||||
| jk1 |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Обратите внимание на то, что в строке
отсутствует первод строки, поэтому следующая итерация цикла начинает вывод в той же самой строке. В результате на выходе получается:
Кстати, не стесняйтесь пользоваться System.out.println() - оно вернет каретку само, безо всяких усилий с вашей стороны. -------------------- Opinions are like assholes — everybody has one |
||||||
|
|||||||
| Ybr |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 4.3.2010 Где: Москва Репутация: нет Всего: нет |
Огромная благодарность jk1! Ситуация прояснилась, и все ошибки исчезли.
|
|||
|
||||
| Ybr |
|
||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 4.3.2010 Где: Москва Репутация: нет Всего: нет |
Столкнулся с новой проблемой.
Задание: имеется строка вида:
Как видите, строка состоит из книг, разделенных знаком двоеточия (':'). Задача немного осложняется тем, что мы заранее НЕ знаем, сколько будет двоеточий в строке. Для решения этой проблемы я выбрал Vector. Код, который разбивает исходную строку s на куски по ':': (это только один из методов некоторого класса. Если есть желание - могу привести код целиком, но я считаю, что это - целесообразно)
Код, который выводит полученные данные (он уже из другого класса и из другого метода, разумеется):
Вывод программы:
Судя по количеству строк, операция деления по ':' производится успешно и безошибочно (в первом случае мы имеем 4 строки, в исходнике - 4 книги; во втором случае - 2 строки и 2 книги - в исходнике). Кроме того, перед выводом я преобразую содержимое vec в строку. Несмотря на все это, он почему-то выводит числовые данные. Подскажите, пожалуйста, где я ошибся. |
||||||||
|
|||||||||
| jk1 |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Он их выводит потому, что вы кладете в Vector числа, а не символы:
indexOf() возвращает позицию символа в строке или -1, если символа в строке нет. Обратите внимание, что передаете вы ему знаечние-переменной счетчика, разумеется в строке его нет. В вашем коде вместо indexOf() следует использовать charAt(). А вообще говоря, механизм разделения строк уже есть:
Если требуется более сложный разбор, можно воспользоваться регулярными выражениями. -------------------- Opinions are like assholes — everybody has one |
||||||
|
|||||||
| Ybr |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 4.3.2010 Где: Москва Репутация: нет Всего: нет |
Этого оказалось достаточно, чтобы решить проблему. Просто заменить indexOf() на charAt(). Какая же глупая ошибка |
|||
|
||||
| Ybr |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 4.3.2010 Где: Москва Репутация: нет Всего: нет |
Столкнулся с очередной ошибкой. Сама ошибка понятна. Непонятно, почему она появляется.
(ошибка на выделенной строке)
В общем, на отмеченной строке (find = br.readLine();) почему-то не происходит записи того, что введено с консоли, в переменную find. Более того: когда я дебажил, то программа просто пропускала эту строку, и шла в try...catch. И там, разумеется, выдается ошибка "StringIndexOutOfBoundsException: String index out of range: 0" (т.к. в методе "find_base" есть обращение к строке find, по индексу 0. Поскольку эта строка пуста, то выдается ошибка.). Подскажите, пожалуйста, в чем дело. Это сообщение отредактировал(а) Ybr - 21.3.2010, 13:27 |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |