Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
1 / 1 / 0
Регистрация: 30.07.2018
Сообщений: 18

Переменная не сохраняет значение

19.06.2019, 14:06. Показов 3227. Ответов 31

Студворк — интернет-сервис помощи студентам
Суть в том, что у нас есть 2 переменные: n и forN. Вторая переменная генерирует рандомное значение в пределах от 5 до 15 каждую секунду. Значение первой переменной инкрементируется по ходу выполнения условных операторов. После завершения каждого она должна увеличиваться на один. Когда значения первой и второй переменной совпадут, производиться действие в одну из 4 сторон.
Проблема в том, что после завершения выполнения условного оператора, значение переменной не сохраняется. Идей как сохранить нет. Если в начале не объявить чему равно n программа ругается.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
 if (inGame) {
 
            int forN = 5 + (int) (Math.random() * 15);
            int sumX;
            int sumY;
            int ran;
            int n = 0;
 
 
            for (int a = 0; a < dots; a++) {
                System.out.println(n);
 
                sumX = x[a] - boxX;
                sumY = y[a] - boxY;
 
                if (sumX > sumY){
                    if (x[a] < boxX){
                        n++;  // Значение должно сохраниться. Теперь значение n должно быть увеличено на +1 и сохранено.
                        System.out.println(n);
                        rightB = false;
                        downB = false;
                        upB = false;
                        leftB = true;
                        boxX = boxX - 5;
                    } else if (x[a] > boxX ){
                        n++;  //Аналогично и дальше.
                        System.out.println(n);
                        leftB = false;
                        upB = false;
                        downB = false;
                        rightB = true;
                        boxX = boxX + 5;
 
                    }
                }
                if (sumY > sumX){
                    if (y[a] < boxY ){
                       n++;
                        System.out.println(n);
                        rightB = false;
                        downB = false;
                        leftB = false;
                        upB = true;
                        boxY = boxY - 5;
 
                    }
                    if (y[a] > boxY){
                        n++;
                        System.out.println(n);
                        rightB = false;
                        leftB = false;
                        upB = false;
                        downB = true;
                        boxY = boxY + 5;
 
                    }
                } if (sumX == sumY) {
                    n++;
                    System.out.println(n);
                    System.out.println("Хо-хо!");
                    leftB = false;
                    upB = false;
                    downB = false;
                    rightB = true;
                    boxX = boxX + 5;
 
                }
           
                if (n == forN) {           //  Здесь должен начаться процесс.
                    ran = 0 + (int) (Math.random() * 5);
                    System.out.println("NEW");
                    if (ran == 1) {
                        leftB = false;
                        downB = false;
                        upB = false;
                        rightB = true;
                        boxX = boxX + 5;
                        boxX = boxX + 5;
                    }
                    if (ran == 2) {
                        rightB = false;
                        downB = false;
                        upB = false;
                        leftB = true;
                        boxX = boxX - 5;
                        boxX = boxX - 5;
 
                    }
                    if (ran == 3) {
                        rightB = false;
                        leftB = false;
                        upB = false;
                        downB = true;
                        boxY = boxY + 5;
                        boxY = boxY + 5;
                    }
                    if (ran == 4) {
                        rightB = false;
                        leftB = false;
                        downB = false;
                        upB = true;
                        boxY = boxY - 5;
                        boxY = boxY - 5;
 
                    }
                }
 
             }
 
          }
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.06.2019, 14:06
Ответы с готовыми решениями:

Почему переменная не сохраняет значение при выходе из прерывания?
uint16_t rxB=0; /*---------------receive--------------------*/ void RxCpltCallback() { Rdata = USART1-&gt;DR; rxB++; ...

Почему при использовании цикла, переменная которая находится внутри него не сохраняет значение при его завершении?
Почему при использовании цикла, переменная которая находится внутри него не сохраняет значение при его завершении.Пример: ...

Какое значение примет переменная после выполнения фрагмента алгоритма, если переменная а имела значение 'ИНФОРМАТИКА'
Имеется фрагмент алгоритма, записанный на алгоритмическом языке: m := 10 b := Извлечь(а, m) нц для k от 4 до 5 с := Извлечь(а,...

31
Заблокирован
19.06.2019, 15:37
Студворк — интернет-сервис помощи студентам
CarlVinson, запрограммировать можно любую вещь, любой процесс, таким образом с помощью ООП и создаются игры, которые являются неким виртуальным подобием реального мира. А 100 переменных писать- это камикадзе надо быть, мозг банально взрывается)
0
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
19.06.2019, 16:39
Собсна, вы солгали. Я проверил ваш код дебаггером и могу с уверенностью заявить, что значение n меняется после каждого условного оператора, если этот условный оператор вообще выполняется. Уж не знаю, как вы проверяли. Может, не ту переменную выводили?

Не по теме:

trgbvs, знаете, не примите за грубость, но буквально всё, что вы написали в этой теме - бесполезная ерунда. Вы сделали вид, что пытаетесь помочь, хотя на самом деле не сделали буквально ничего, но зато сколько сообщений написали. И почему вы в каждой теме стремитесь упомянуть свой двенадцатилетный опыт программирования? Поверьте, данное заявление не придаёт никакого веса вашим словам. Если вы не в состоянии никак помочь человеку, то хотя бы не надо засорять тему бессмысленными сообщениями. Опять же, я не стремлюсь вас обидеть, просто то, что вы делаете, очень не круто



Добавлено через 9 минут
А, стоп, вывод ж не убрали. Ну в общем да, даже в консоль выводит, что переменная меняется. Правда, т.к. у меня значения подобраны случайно, то я не смог поднять значение n больше трёх. В общем-то, скорее всего до операции инкрементирования программа у вас просто не доходит
4
1 / 1 / 0
Регистрация: 30.07.2018
Сообщений: 18
19.06.2019, 23:06  [ТС]
Не понимаю при чем здесь ложь. У меня на консоли выводит вот такие значения:
0
1
0
1
0
1
0
1
и т.д и т.д.
Это говорит о том что во время выполнения условного оператора значение увеличивается на один. Однако при окончании его, значение сбрасывается до нуля. (Особенно смущает строка int n = 0, но проблема в том что если не объявить чему равна переменная, программа не запускается)
В моем понимании на консоли должны выводиться данные подобным образом:
1
1
2
2
3
3
и так далее до тех пор пока переменная n не будет равна переменной forN.

Добавлено через 8 минут
Gungala, не очень ясны моменты про случайно подобранные значения, ибо n в теории должно достигать 5, но не 3. А как показывает консоль переменная инкрементируется. Обычно у меня получалось решать такие проблемы засчет объявления переменной в теле метода или в класса. Тут не помогает...
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
19.06.2019, 23:13
Ты на каждой итерации цикла в n ноль кладешь если что
0
1 / 1 / 0
Регистрация: 30.07.2018
Сообщений: 18
19.06.2019, 23:31  [ТС]
xoraxax, я не могу не инициализировать эту переменную. Если не инициализировать программа будет ругаться, если инициализировать, то значение не сохраняется, вновь и вновь заменяясь нулем. Что такое репликации?
0
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
19.06.2019, 23:49
CarlVinson, как я понимаю, вы используете не тот код, что в самом первом посте этой темы, ибо в нём n не обнуляется каждую итерацию

Добавлено через 47 секунд
И я выражался образно, когда говорил, что вы солгали

Добавлено через 9 минут
Я проверял именно тот код, что был в самом начале и он работает
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
20.06.2019, 07:08
Цитата Сообщение от CarlVinson Посмотреть сообщение
я не могу не инициализировать эту переменную
Ну так поставь int n = 0; перед циклом!
0
1 / 1 / 0
Регистрация: 30.07.2018
Сообщений: 18
20.06.2019, 11:35  [ТС]
Gungala, iSmokeJC, первый скрин с объявлением переменной n до цикла, второй в теле цикла (или наоборот). Разницы в выводящихся в консоли данных не вижу.
В следующих сообщениях отправлю.
Миниатюры
Переменная не сохраняет значение  
0
1 / 1 / 0
Регистрация: 30.07.2018
Сообщений: 18
20.06.2019, 11:39  [ТС]
Вложение 1049968 - если не открылся в предыдущем сообщении
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
20.06.2019, 12:18
Лучший ответ Сообщение было отмечено CarlVinson как решение

Решение

вынеси n в поля
Java
1
2
3
4
5
6
7
8
9
private boolean leftB = false;
    private boolean rightB = true;
    private boolean downB = false;
    private boolean upB = false;
 
    private boolean s = true;
 
    private int a = 1;
    int n = 0;
и хорошо бы представлять хоть немного, что ты делаешь и как работает твой код
1
20.06.2019, 12:19

Не по теме:

Интересно уже, чем все это закончится :-|

0
1 / 1 / 0
Регистрация: 30.07.2018
Сообщений: 18
20.06.2019, 12:26  [ТС]
xoraxax, спасибо, работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.06.2019, 12:26
Помогаю со студенческими работами здесь

Переменная типа string сохраняет не все данные
Всем привет! Помогите пожалуйста проблему решить, ума не приложу, почему переменная типа string перестаёт принимать то значение, что я ей...

Не удается присвоить значение члену переменная "in Some", так как это переменная только для чтения
namespace CSrharpApplicationTest { public struct Some { public int x; } public class Program {...

DataTable не сохраняет значение
Добрый день. Может кто подскажет в чем проблема, передаю результаты запроса в datagrid mysql.Open(); ...

не сохраняет значение радиокнопки после перезагрузки
Здравствуйте,в CMS Opencart создал radiobutton для вкл или отк навигации в каруселе ,все работает,но если еще раз зайти в модуль значения...

Запрос на обновление из VBA не сохраняет значение
Приветствую! Наверное, я как-то неправильно использую технологию запуска запроса из VBA Сам запрос на обновление записей, если его...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru