powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / В чём проблема?
25 сообщений из 28, страница 1 из 2
В чём проблема?
    #39631022
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> 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)

Помогите, в чём проблема?? Как исправить?
...
Рейтинг: 0 / 0
В чём проблема?
    #39631028
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ткните пальцем, где у Вас 40 строчка. А то в Вашем коде глазки в кучку складываются (((

по подсчетам, 40 строка это
int ЗначениеПеременной = s.nextInt();
но поскольку, там нет никаких ArrayList, думаю, что я не прав. И в Вашей версии кода, 40 строка это что-то другое
...
Рейтинг: 0 / 0
В чём проблема?
    #39631030
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и кусок кода
Код: java
1.
2.
vvod.add(v);
if(vvod.get(y).equals("переменная")) {


на мой взгляд это что-то запредельное по глубине мысли. Мне оценить не под силу (((
...
Рейтинг: 0 / 0
В чём проблема?
    #39631031
artm1234567890
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,
Вы правы строка номер 40 это "int ЗначениеПеременной = s.nextInt();"

А зачем, кстати, вам она? Ошибку ведь показывает в строке номер 48 ( if(vvod.get(y).equals("вывести все переменные")) { )
...
Рейтинг: 0 / 0
В чём проблема?
    #39631032
artm1234567890
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

В каком смысле запредельное? Вы не понимаете что это означает, или что?
...
Рейтинг: 0 / 0
В чём проблема?
    #39631033
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аналогично ф-ция НаличиеЗнакаРавно
мне смысл данной функции, которая ничего не возврашает и никак на последующую работу не сказывается, не понятно

Ну и вообще. Наличие символов придуманных Кириллом и Мефодиям в программе на Java.... оно конечно патриотично... но как-то не привычно )))
...
Рейтинг: 0 / 0
В чём проблема?
    #39631035
artm1234567890
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

Эта функция проверяет есть ли знак равно , и если он отсутствует - не пропускает дальше и пишет чтобы вы поставили равно. Дело в том, что я хочу сделать что-то вроде языка программирования на основе java, где всё вводится с консоли.
...
Рейтинг: 0 / 0
В чём проблема?
    #39631036
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artm1234567890А зачем, кстати, вам она? Ошибку ведь показывает в строке номер 48 ( if(vvod.get(y).equals("вывести все переменные")) { )

Сорри. Просто ошибся. Вместо 48 увидел 40.

Тогда все понятно. К этому моменту Вы переменную y уже увеличили и она показывает за пределы массива. Все логично

artm1234567890Leonid Kudryavtsev,

В каком смысле запредельное? Вы не понимаете что это означает, или что?
Да. Я не понимаю зачем это надо.

Значение уже содержится в переменной v.

Зачем Вы складываете их в массив, руками отслеживаете конец массива в переменной y (при этом ошибочно) и обратно извлекаете только что дабовленные данные из массива - мне не ясно. Они и так уже есть в переменной v. Ни массив, ни счетчик элементов - избыточны и не нужны. IMHO
...
Рейтинг: 0 / 0
В чём проблема?
    #39631037
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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-
...
Рейтинг: 0 / 0
В чём проблема?
    #39631039
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artm1234567890Leonid Kudryavtsev,

Эта функция проверяет есть ли знак равно , и если он отсутствует - не пропускает дальше и пишет чтобы вы поставили равно. Дело в том, что я хочу сделать что-то вроде языка программирования на основе java, где всё вводится с консоли.

Если знак отсутвует, то продолжать обработку как-то странно. Это уже ошибка.

Или знак равно опциональный - но тогда не нужно сообщать про его отсутвие, или если он требуется - то тогда нельзя продолжать обработку дальше, а нужно выводить ошибку и уходить в начало

IMHO
...
Рейтинг: 0 / 0
В чём проблема?
    #39631045
artm1234567890
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Я не очень понимаю как к этому относится переменная y.
...
Рейтинг: 0 / 0
В чём проблема?
    #39631047
artm1234567890
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

Если он отсутствует, то выводит сообщение "Ошибка, поставьте знак =" и дальше можно только перезапустить и написать нормально.
...
Рейтинг: 0 / 0
В чём проблема?
    #39631055
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artm1234567890Я не очень понимаю как к этому относится переменная y.
в данном месте кода, в данной переменной некоректное значение --> ошибка "выход за пределы массива"

artm1234567890Как исправить?

IMHO
Полностью удалить из программы и массив vvod и переменную y как не нужные и не используемые
Аналогично и переменную x. Она вроде тоже никак не используется.

artm1234567890Если он отсутствует, то выводит сообщение "Ошибка, поставьте знак =" и дальше можно только перезапустить и написать нормально.

Что Вы понимаете под словом "перезапустить" ?
Хорошо хоть не "дальше можно только перезагрузить компьютер и написать нормально" )))

Если ошибка и нужно прервать выполнение, на крайний случай System.exit(). Но уж никак не вывести сообщение и продолжить обработку как ни в чем не бывало.... IMHO По хорошему или возврат флага ошибки в исходную программу (+ возврат прочитанного токена во входной поток), или исключение, или что-то другое.

Вся работа с входным поток выглядит крайне по детски, но объяснять как делаются конечные автоматы для парсинга граматики - больно долго. Из книжек по теме помню только Вирт Н. Построение компиляторов. Если тема интересна, то желательно еще что нибудь почитать про конечные автоматы. IMHO & AFAIK
...
Рейтинг: 0 / 0
В чём проблема?
    #39631061
artm1234567890
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

А как по другому сделать бесконечное повторение цикла без переменной x? И как осуществить ввод без коллекции vvod?
...
Рейтинг: 0 / 0
В чём проблема?
    #39631066
artm1234567890
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
artm1234567890Leonid Kudryavtsev,

А как по другому сделать бесконечное повторение цикла без переменной x? И как осуществить ввод без коллекции vvod и переменной y?
...
Рейтинг: 0 / 0
В чём проблема?
    #39631069
artm1234567890
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
artm1234567890Leonid Kudryavtsev,

А как по другому сделать бесконечное повторение цикла без переменной x? Ну в принципе без переменной x можно обойтись, если заменить цикл while(x > 0) циклом for(; ;) , но как без y и vvod осуществить ввод?
...
Рейтинг: 0 / 0
В чём проблема?
    #39631073
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artm1234567890А как по другому сделать бесконечное повторение цикла


Опуская вопрос, зачем вообще нужен бесконечный цикл в программе:

Код: sql
1.
2.
3.
while ( true ) {
...
}



artm1234567890И как осуществить ввод без коллекции vvod?

Тут как говорится "no comment"

Вы и так его уже успешно осуществляете в переменную v.

А вот зачем Вам нужно коллекция vvod, я даже представить себе не могу. Как я уже сказал "мне оценить не под силу".

Подозреваю, что код Вы не сами создавали с нуля, а у кого-то позаимствовали и творчески доработали напильником ))) В представленной Вами версии ни vvod, ни y, ни х не нужны как класс. Их нужно просто удалить. IMHO
...
Рейтинг: 0 / 0
В чём проблема?
    #39631074
artm1234567890
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подозреваю, что код Вы не сами создавали с нуля, а у кого-то позаимствовали и творчески доработали напильником ))) В представленной Вами версии ни vvod, ни y, ни х не нужны как класс. Их нужно просто удалить. IMHO
Код я как раз создавал сам
...
Рейтинг: 0 / 0
В чём проблема?
    #39631076
artm1234567890
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,
Я не догадался, что можно обойтись без vvod и y , заменив их переменной v. Спасибо!
...
Рейтинг: 0 / 0
В чём проблема?
    #39631078
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда отведте на вопрос, что делает переменная vvod и зачем она Вам нужна?
я этого понять не могу
...
Рейтинг: 0 / 0
В чём проблема?
    #39631084
artm1234567890
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

Во-первых vvod - это не переменная, а коллекция. Она мне нужна была для того, чтобы с помощью переменной y анализировать то, что ввёл пользователь таким образом:
пользователь вводит значение переменной v
переменная v добавляется в коллекцию vvod
с помощью if программа анализирует что именно было введено в переменной коллекции, индекс которой равняется y (изначально y равен 0)
после ввода y увеличивается на 1
...
Рейтинг: 0 / 0
В чём проблема?
    #39631086
artm1234567890
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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("Существующие переменные : " + имена_переменных);
}
}}

}
Почему команда вывести переменные не работает?
...
Рейтинг: 0 / 0
В чём проблема?
    #39631089
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artm1234567890 , а можешь для начала научиться форматировать свой код в постах???
...
Рейтинг: 0 / 0
В чём проблема?
    #39631093
artm1234567890
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry.,
Я на этом сайте только зарегался, как это делать, подскажите?
...
Рейтинг: 0 / 0
В чём проблема?
    #39631094
artm1234567890
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
artm1234567890,
И как сделать, чтобы нельзя было создавать переменные с одинаковыми именами?
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / В чём проблема?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]