|
|
|
В чём проблема?
|
|||
|---|---|---|---|
|
#18+
Написал такую программу: import java.util.*; public class P { static String СледующийЗнак; static void ПроверкаНаПеременную() { boolean наличие; } static void НаличиеЗнакаРавно() { boolean наличие; if(СледующийЗнак.equals("=")) { наличие = true; } else { наличие = false; } if(наличие == false) { System.out.println("Ошибка! Поставьте знак = "); } } public static void main(String[]args) { ArrayList<String> vvod = new ArrayList<String>(1); ArrayList<String>имена_переменных = new ArrayList<String>(); ArrayList<Integer>значения_переменных = new ArrayList<Integer>(); int imena = 0; int znacheniya = 0; int x = 1; int y = 0; Scanner s = new Scanner(System.in); while(x > 0) { String v = s.next(); vvod.add(v); if(vvod.get(y).equals("переменная")) { String ИмяПеременной = s.next(); СледующийЗнак = s.next(); НаличиеЗнакаРавно(); int ЗначениеПеременной = s.nextInt(); имена_переменных.add(ИмяПеременной); ++imena; значения_переменных.add(ЗначениеПеременной); ++znacheniya; ++y; } if(vvod.get(y).equals("вывести все переменные")) { System.out.println("Существующие переменные : " + имена_переменных); ++y; } }}} При вводе переменных вылезает вот такая ошибка: Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 at java.util.ArrayList.rangeCheck(Unknown Source) at java.util.ArrayList.get(Unknown Source) at P.main(P.java:48) Помогите, в чём проблема?? Как исправить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 17:57 |
|
||
|
В чём проблема?
|
|||
|---|---|---|---|
|
#18+
Ткните пальцем, где у Вас 40 строчка. А то в Вашем коде глазки в кучку складываются ((( по подсчетам, 40 строка это int ЗначениеПеременной = s.nextInt(); но поскольку, там нет никаких ArrayList, думаю, что я не прав. И в Вашей версии кода, 40 строка это что-то другое ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 18:10 |
|
||
|
В чём проблема?
|
|||
|---|---|---|---|
|
#18+
Ну и кусок кода Код: java 1. 2. на мой взгляд это что-то запредельное по глубине мысли. Мне оценить не под силу ((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 18:11 |
|
||
|
В чём проблема?
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, Вы правы строка номер 40 это "int ЗначениеПеременной = s.nextInt();" А зачем, кстати, вам она? Ошибку ведь показывает в строке номер 48 ( if(vvod.get(y).equals("вывести все переменные")) { ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 18:13 |
|
||
|
В чём проблема?
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, В каком смысле запредельное? Вы не понимаете что это означает, или что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 18:14 |
|
||
|
В чём проблема?
|
|||
|---|---|---|---|
|
#18+
Аналогично ф-ция НаличиеЗнакаРавно мне смысл данной функции, которая ничего не возврашает и никак на последующую работу не сказывается, не понятно Ну и вообще. Наличие символов придуманных Кириллом и Мефодиям в программе на Java.... оно конечно патриотично... но как-то не привычно ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 18:15 |
|
||
|
В чём проблема?
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, Эта функция проверяет есть ли знак равно , и если он отсутствует - не пропускает дальше и пишет чтобы вы поставили равно. Дело в том, что я хочу сделать что-то вроде языка программирования на основе java, где всё вводится с консоли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 18:18 |
|
||
|
В чём проблема?
|
|||
|---|---|---|---|
|
#18+
artm1234567890А зачем, кстати, вам она? Ошибку ведь показывает в строке номер 48 ( if(vvod.get(y).equals("вывести все переменные")) { ) Сорри. Просто ошибся. Вместо 48 увидел 40. Тогда все понятно. К этому моменту Вы переменную y уже увеличили и она показывает за пределы массива. Все логично artm1234567890Leonid Kudryavtsev, В каком смысле запредельное? Вы не понимаете что это означает, или что? Да. Я не понимаю зачем это надо. Значение уже содержится в переменной v. Зачем Вы складываете их в массив, руками отслеживаете конец массива в переменной y (при этом ошибочно) и обратно извлекаете только что дабовленные данные из массива - мне не ясно. Они и так уже есть в переменной v. Ни массив, ни счетчик элементов - избыточны и не нужны. IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 18:20 |
|
||
|
В чём проблема?
|
|||
|---|---|---|---|
|
#18+
artm1234567890Leonid Kudryavtsev, В каком смысле запредельное? Вы не понимаете что это означает, или что? Научитесь использовать пошаговую отладку в среде разработки. У вас переменная y становится единицей, в то время как в списке только один элемент. Ну и документацию стоит иногда читать https://docs.oracle.com/javase/8/docs/api/index.html?java/lang/IndexOutOfBoundsException.html https://docs.oracle.com/javase/8/docs/api/java/util/List.html#get-int- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 18:20 |
|
||
|
В чём проблема?
|
|||
|---|---|---|---|
|
#18+
artm1234567890Leonid Kudryavtsev, Эта функция проверяет есть ли знак равно , и если он отсутствует - не пропускает дальше и пишет чтобы вы поставили равно. Дело в том, что я хочу сделать что-то вроде языка программирования на основе java, где всё вводится с консоли. Если знак отсутвует, то продолжать обработку как-то странно. Это уже ошибка. Или знак равно опциональный - но тогда не нужно сообщать про его отсутвие, или если он требуется - то тогда нельзя продолжать обработку дальше, а нужно выводить ошибку и уходить в начало IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 18:23 |
|
||
|
В чём проблема?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Я не очень понимаю как к этому относится переменная y. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 18:33 |
|
||
|
В чём проблема?
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, Если он отсутствует, то выводит сообщение "Ошибка, поставьте знак =" и дальше можно только перезапустить и написать нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 18:35 |
|
||
|
В чём проблема?
|
|||
|---|---|---|---|
|
#18+
artm1234567890Я не очень понимаю как к этому относится переменная y. в данном месте кода, в данной переменной некоректное значение --> ошибка "выход за пределы массива" artm1234567890Как исправить? IMHO Полностью удалить из программы и массив vvod и переменную y как не нужные и не используемые Аналогично и переменную x. Она вроде тоже никак не используется. artm1234567890Если он отсутствует, то выводит сообщение "Ошибка, поставьте знак =" и дальше можно только перезапустить и написать нормально. Что Вы понимаете под словом "перезапустить" ? Хорошо хоть не "дальше можно только перезагрузить компьютер и написать нормально" ))) Если ошибка и нужно прервать выполнение, на крайний случай System.exit(). Но уж никак не вывести сообщение и продолжить обработку как ни в чем не бывало.... IMHO По хорошему или возврат флага ошибки в исходную программу (+ возврат прочитанного токена во входной поток), или исключение, или что-то другое. Вся работа с входным поток выглядит крайне по детски, но объяснять как делаются конечные автоматы для парсинга граматики - больно долго. Из книжек по теме помню только Вирт Н. Построение компиляторов. Если тема интересна, то желательно еще что нибудь почитать про конечные автоматы. IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 18:52 |
|
||
|
В чём проблема?
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, А как по другому сделать бесконечное повторение цикла без переменной x? И как осуществить ввод без коллекции vvod? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 18:58 |
|
||
|
В чём проблема?
|
|||
|---|---|---|---|
|
#18+
artm1234567890Leonid Kudryavtsev, А как по другому сделать бесконечное повторение цикла без переменной x? И как осуществить ввод без коллекции vvod и переменной y? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 19:01 |
|
||
|
В чём проблема?
|
|||
|---|---|---|---|
|
#18+
artm1234567890Leonid Kudryavtsev, А как по другому сделать бесконечное повторение цикла без переменной x? Ну в принципе без переменной x можно обойтись, если заменить цикл while(x > 0) циклом for(; ;) , но как без y и vvod осуществить ввод? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 19:04 |
|
||
|
В чём проблема?
|
|||
|---|---|---|---|
|
#18+
artm1234567890А как по другому сделать бесконечное повторение цикла Опуская вопрос, зачем вообще нужен бесконечный цикл в программе: Код: sql 1. 2. 3. artm1234567890И как осуществить ввод без коллекции vvod? Тут как говорится "no comment" Вы и так его уже успешно осуществляете в переменную v. А вот зачем Вам нужно коллекция vvod, я даже представить себе не могу. Как я уже сказал "мне оценить не под силу". Подозреваю, что код Вы не сами создавали с нуля, а у кого-то позаимствовали и творчески доработали напильником ))) В представленной Вами версии ни vvod, ни y, ни х не нужны как класс. Их нужно просто удалить. IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 19:06 |
|
||
|
В чём проблема?
|
|||
|---|---|---|---|
|
#18+
Подозреваю, что код Вы не сами создавали с нуля, а у кого-то позаимствовали и творчески доработали напильником ))) В представленной Вами версии ни vvod, ни y, ни х не нужны как класс. Их нужно просто удалить. IMHO Код я как раз создавал сам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 19:09 |
|
||
|
В чём проблема?
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, Я не догадался, что можно обойтись без vvod и y , заменив их переменной v. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 19:11 |
|
||
|
В чём проблема?
|
|||
|---|---|---|---|
|
#18+
Тогда отведте на вопрос, что делает переменная vvod и зачем она Вам нужна? я этого понять не могу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 19:12 |
|
||
|
В чём проблема?
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, Во-первых vvod - это не переменная, а коллекция. Она мне нужна была для того, чтобы с помощью переменной y анализировать то, что ввёл пользователь таким образом: пользователь вводит значение переменной v переменная v добавляется в коллекцию vvod с помощью if программа анализирует что именно было введено в переменной коллекции, индекс которой равняется y (изначально y равен 0) после ввода y увеличивается на 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 19:18 |
|
||
|
В чём проблема?
|
|||
|---|---|---|---|
|
#18+
artm1234567890, изменил программу вот так: import java.util.*; public class P { static String СледующийЗнак; static void ПроверкаНаПеременную() { boolean наличие; } static void НаличиеЗнакаРавно() { boolean наличие; if(СледующийЗнак.equals("=")) { наличие = true; } else { наличие = false; } if(наличие == false) { System.out.println("Ошибка! Поставьте знак = "); } } public static void main(String[]args) { ArrayList<String>имена_переменных = new ArrayList<String>(); ArrayList<Integer>значения_переменных = new ArrayList<Integer>(); int imena = 0; int znacheniya = 0; Scanner s = new Scanner(System.in); for(; ;) { String v = s.next(); switch(v) { case "переменная": String ИмяПеременной = s.next(); СледующийЗнак = s.next(); НаличиеЗнакаРавно(); int ЗначениеПеременной = s.nextInt(); имена_переменных.add(ИмяПеременной); значения_переменных.add(ЗначениеПеременной); System.out.println("Добавлена новая переменная " + имена_переменных.get(imena) + " со значением равным " + значения_переменных.get(znacheniya) + "."); ++imena; ++znacheniya; break; case "вывести все переменные": System.out.println("Существующие переменные : " + имена_переменных); } }} } Почему команда вывести переменные не работает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 19:21 |
|
||
|
В чём проблема?
|
|||
|---|---|---|---|
|
#18+
artm1234567890 , а можешь для начала научиться форматировать свой код в постах??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 19:24 |
|
||
|
В чём проблема?
|
|||
|---|---|---|---|
|
#18+
Dmitry., Я на этом сайте только зарегался, как это делать, подскажите? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 19:25 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39631076&tid=2122117]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
59ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 14ms |
| total: | 175ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...