2014-01-27 2 views
0

Итак, в контексте, у меня есть проект CS, в котором ввод выполняется в форме слова или предложения, а затем он переводится на то, что скажет шведский шеф-повар из The Muppets. Я решил взять ввод как одну строку строки и отправить эту строку в синтаксический анализатор, который, в свою очередь, будет строить массив из переводов букв ввода. Условия для того, что изменяется, определяются внутри. текущая ошибка я получаю: (при использовании «INPUT» в качестве входных данных)Шведский шеф-повар Переводчик

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 1 
    at java.util.ArrayList.rangeCheckForAdd(Unknown Source) 
    at java.util.ArrayList.add(Unknown Source) 
    at SwedishTranslator.parseString(SwedishTranslator.java:62) 
    at SwedishTranslator.main(SwedishTranslator.java:12) 

В настоящее время он должен просто напечатать массив, я хотел бы беспокоиться о форматировании после факта. Код:

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

+1

Возможно, вы захотите ознакомиться с тем, как использовать отладчик для перехода через вашу программу. Кроме того, исключение указывает вам, какая строка вызывает ошибку. – jpw

ответ

4

ind<=in.length() идет на один шаг слишком далеко.

Использование ind < in.length() или ind <= in.length() - 1

2

Ошибка arrises на линии 62, который я предполагаю в вашей большой, если еще раздел.

Внутри вас есть несколько звонков ind++. Это увеличивает указатель, который вы используете в цикле. Поэтому, если ваш код должен пройти через несколько из этих операторов, он будет выходить за пределы индекса массива.

Кроме того у вас есть проблемы в цикл, как Джовал упоминалось

Редактировать

увеличивает ++ унарный переменную (- декрементах). Размещение ++ после того, как имя переменной (x ++) будет увеличиваться до оценки, где ++ x будет увеличиваться после оценки.

Это распространенный тестовый вопрос для студентов CS, поэтому я предлагаю вам провести еще несколько исследований и практических занятий относительно оператора.

+0

Итак, in.charAt (ind ++) действительно добавит 1 к ind, а затем, когда он проверит следующее условие, он в конечном итоге проверит границы? Я думал, что это просто проверка, а не счет инда. – user2073881

+0

@ user2073881 Отредактировано – RyanS

0

Вы делаете пару действительно понятных начинающих ошибок здесь. Вместо того, чтобы явно фиксировать ваш код, я расскажу вам о нескольких вещах, которые, если их учитывать при просмотре и редактировании кода, также помогут устранить вашу проблему.

Документация для String.charAt http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#charAt(int) вызывает ошибку при попытке получить доступ к элементам вне границ в String. Убедитесь, что вы проверяете, что вы не пытаетесь смотреть за пределы строки, прежде чем вы начнете называть charAt все волей-неволей! Если вы в настоящее время «рассматриваете» «T» в «INPUT», и вы пытаетесь посмотреть на следующие два символа, Java будет жаловаться.

Во-вторых, и это более общая вещь (хотя это необходимо зафиксировать в вашем коде выше); оператор «++» не делает то, что, по-видимому, считает, что это действительно так. Когда вы это сделаете: in.charAt(ind++)=='H', вы можете подумать, что вы просто проверяете значение по следующему индексу, но на самом деле вы на самом деле , продвигаясь на указатель! Оператор «++» очень удобен, но имеет побочный эффект, который вызывает множество новичков: он присваивает себе + 1 себе! Это означает, что если вы находитесь на «Я» в «INPUT» и где-то в вашем цикле вы вызываете ind++ один раз, вы будете на «P» на следующей итерации своего цикла! Когда вы видите «++», помните, что вы меняете значение переменной.

Удачи вам!

+0

Спасибо! Я не кодировал в течение примерно 3 месяцев, поэтому я все еще стараюсь избавиться от ржавчины в подготовке к следующему курсу. Я ценю объяснения. – user2073881

Смежные вопросы