Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 27.12.2020
Сообщений: 34

Обнуляется переменная, по нажатию кнопки (UI)

13.03.2021, 18:38. Показов 3120. Ответов 32

Студворк — интернет-сервис помощи студентам
Допустим, есть код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
int file;               //хранит в себе номер файла
 
    public void btnclick() {
        //какой-нибудь код
        file = 2;
        //ещё какой-нибудь код
    }
    //следующий метод срабатывает по нажатию кнопки
    public void filedelete() {
        System.IO.File.Delete(путь к файлу+file+".txt");
        Debug.Log(file);
    }
Вроде бы, результатом метода "filedelete" должно быть удаление файла по адресу "директория\2.txt" и вывод в консоль "2".
Но на деле по-другому: пытается удалить несуществующий файл по адресу "директория\0.txt" и в консоль получаем "0"
То есть, переменная file при вызове метода filedelete обнуляется (это понял через Debug.Log(file), расставляя во всех методах)
Что делать? Уже много ресурсов облазил, но проблему так и не решил.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.03.2021, 18:38
Ответы с готовыми решениями:

Переменная обнуляется
Здравствуйте. У меня есть такой код: class MyClass : MonoBehaviour { public static int Number {get; private set;} ...

Обнуляется переменная
using System; namespace ConsoleApp6 { class Program

Обнуляется переменная
Добрый день. Сразу предупреждаю, мягко говоря, код не очень красивый. Проблема такая, есть 2 класса. Первый: using System; using...

32
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,076
13.03.2021, 18:58
C#
1
btnclick()
тут если этот не вызвать будет file равнятся 0
0
0 / 0 / 0
Регистрация: 27.12.2020
Сообщений: 34
13.03.2021, 19:11  [ТС]
zhunshun, дело в том, что этот как раз вызывается сначала и переменной file присваивается значение 2, уже потом метод filedelete()
0
 Аватар для 1max1
3362 / 1775 / 1028
Регистрация: 26.10.2018
Сообщений: 5,204
13.03.2021, 19:23
Полный код покажи.
0
0 / 0 / 0
Регистрация: 27.12.2020
Сообщений: 34
13.03.2021, 19:40  [ТС]
1max1, полный код, к сожалению, сейчас не в зоне моей досягаемости. Могу только сказать, что я точно знаю, что переменная file в других методах, скриптах и т.д. да вообще нигде не обнуляется. Иногда ей присваивается другое значение, но оно отлично от нуля. Ещё есть методы очень схожие с btnclick() но это, думаю, ничего Вам не даст
0
 Аватар для 1max1
3362 / 1775 / 1028
Регистрация: 26.10.2018
Сообщений: 5,204
13.03.2021, 19:45
Ситуация, описанная выше, должна работать правильно, видимо ты что-то упускаешь.
0
0 / 0 / 0
Регистрация: 27.12.2020
Сообщений: 34
13.03.2021, 19:49  [ТС]
1max1, вот я и пошёл на форум. Ну как же так, переменная нигде не обнуляется, Debug.Log() говорит, что она не равна нулю но при вызове метода вдруг нуль..

Добавлено через 51 секунду
1max1, хотя, мне кажется, это особенности юнити
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,076
13.03.2021, 19:54
Или после "//какой-нибудь код" метод перестает работать, или в Update где то еще какие то методы ее могут ставить в 0
0
0 / 0 / 0
Регистрация: 27.12.2020
Сообщений: 34
13.03.2021, 20:00  [ТС]
zhunshun, можно ли это узнать как-то без дебагера (ну, т.е. точки останова и подобное)?

Добавлено через 2 минуты
или какая-нибудь универсальная функция что б переменная в нуль не ставилась... после "//какой-нибудь код" метод точно работает дальше до своего конца. В конце в переменной отличной от нуля значение (выводил её значение в консоль)
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,076
13.03.2021, 20:00
В Update поставь дебаг и после нажатия на кнопку постмотри какой результат file пожалуиста пользуиса точками останова.Отладчик тоже очень удобныи
0
0 / 0 / 0
Регистрация: 27.12.2020
Сообщений: 34
13.03.2021, 20:02  [ТС]
в самом начале метода, который обрабатывает нажатие на кнопку переменная уже в нуле
*последую совету с точками останова (просто уже почти готово всё, осталось совсем немного и вопрос срочный, а тут ещё разбираться с привязкой VS к юнити что б точками пользоваться (если я всё правильно понял))
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
13.03.2021, 20:06
Цитата Сообщение от Temi4 Посмотреть сообщение
В конце в переменной отличной от нуля значение (выводил её значение в консоль)
В конце метода может у неё и действительно значение не ноль. Но сохранение у вас происходит не в конце метода, а где-то в середине.
Без всего кода не обойтись.
0
0 / 0 / 0
Регистрация: 27.12.2020
Сообщений: 34
13.03.2021, 20:08  [ТС]
код будет только завтра. Если Вы про сохранение переменной file, то я уже и вначале метода сохранял и в конце, без толку всё
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,076
13.03.2021, 20:14
А как вы сбрасываете обратно file на 0? после удаления. Или никак? так 2 и должно остаться?
Тут и неправильная у вас логика, должно:
C#
1
2
3
4
5
6
public void filedelete() {
       Debug.Log(file);//здесь выведите
       string path = путь к файлу+file+".txt";
       if(System.IO.File.Exists(path))//проверка есть ли там фиал
        System.IO.File.Delete(path);
}
Может повторно создается
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
13.03.2021, 20:16
Temi4, Без всего кода не обойтись. Возможно у вас там банальная ошибка, например в методе btnclick создаётся локальная переменная с таким же именем file, которая не имеет ничего общего с переменной экземпляра класса.
Немного не понимаю стремления оживлённо угадывать нахождения проблемы в воображаемом коде.
1
0 / 0 / 0
Регистрация: 27.12.2020
Сообщений: 34
13.03.2021, 20:26  [ТС]
zhunshun, в принципе, переменную можно и обнулить. File.Exists() не нужен, так как по логике самого приложения возможность удалить файл будет только в том случае, если ты его создавал ранее. Хотя, эта процедура хуже не сделает. То есть, если я сам обнулю переменную после использования, это решит проблему?

Добавлено через 2 минуты
samana, хорошо, завтра будет код
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,076
13.03.2021, 20:27
Гадание на ладошке
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
13.03.2021, 20:48
Temi4,
Цитата Сообщение от Temi4 Посмотреть сообщение
File.Exists() не нужен, так как по логике самого приложения возможность удалить файл будет только в том случае, если ты его создавал ранее.
Если идёт работа с файлом, то сначала в обязательном порядке нужно убедится, что этот файл существует.

Цитата Сообщение от Temi4 Посмотреть сообщение
так как по логике самого приложения возможность удалить файл будет только в том случае, если ты его создавал ранее
Логика может незаметно сломаться, а потом придётся искать причину - почему file=2, но по факту file=0.
0
0 / 0 / 0
Регистрация: 27.12.2020
Сообщений: 34
14.03.2021, 15:59  [ТС]
samana, Вот код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
string directory2 = @"texts\zametkitext\z";
public InputField InputName;
public InputField InputText;
public int filenn = 0;
string str, str1;
 
    public void ButtonTwoClick() {            //этот метод обрабатывает нажатие другой кнопки
        filenn = 2;
        SceneChange(1);
        FileRead(2);
        LoadText(str, str1);
        Debug.Log(filenn);  //тут выводит "2"
    }
 
    public void NoteDelete() {                                //а в этом методе переменная почему-то и обнуляется (обработка нажатия)
        Debug.Log(filenn);          //тут выводит "0"
        SceneChange(0);
        FileDelete(filenn);                                             
    }
 
    public void FileDelete(int Nomer) {
        File.Delete(Application.dataPath + "/" + directory2 + Nomer + ".txt");
    }
Тут, конечно, костыли и метод FileDelete можно запихнуть в NoteDelete, но этот код был результатом попытки исправления бага. Проверки на наличие файла тут нету, но говорил что код скину, сейчас пойду добавлю проверку файла

Добавлено через 6 минут
Но проверка наличия файла ведь не исправит ситуацию, проблема в обнулении переменной

Добавлено через 3 минуты
Ещё добавил переменную-буфер, она тоже обнуляется при вызове метода-обработчика нажатия
0
 Аватар для 1max1
3362 / 1775 / 1028
Регистрация: 26.10.2018
Сообщений: 5,204
14.03.2021, 16:32
Я так понимаю сначала срабатывает метод ButtonTwoClick, а потом NoteDelete? Если так, то где-то есть код, который зануляет переменную, поищи по всему проекту, где еще она используется (можешь сделать ее private, ошибка сразу выскочит в том месте).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.03.2021, 16:32
Помогаю со студенческими работами здесь

Обнуляется переменная
Ребята, в общем такая проблема. При нажатии кнопки ok формы у меня почему-то обнуляется переменная id, хотя в других action'ах все отлично....

Обнуляется глобальная переменная
Добрый день. У меня обнуляется глобальная переменная, хотя и не должна. Идея в том, что каждой галлерее соответсвует своя папка в каталоге...

Переменная произвольно обнуляется
Здравствуйте. Есть класс: template<const int k,const int n> class GF { public: int F; // Массив многочленов. public: //...

Переменная не обнуляется до конца
Добрый день! Мне необходимо написать программу для расчета функции и вывести все ее значения в таблицу. Коэффициенты функции, начальное и...

Обнуляется глобальная переменная!
public static string PathRMMV = null; public string PathProjectRMMV = null; public string PathAdobeFotoshop = null; ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
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-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru