Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
 Аватар для KiraLis39
9 / 10 / 1
Регистрация: 23.07.2014
Сообщений: 346

Ошибка: "Переменная ххх могла быть не инициализирована."

18.09.2015, 08:20. Показов 1954. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я пытаюсь создать строку:
Java
1
2
3
4
public void tracking(String goal, String fileData, String consol)
    {
        final String currentLogPath = Launcher.LogCreator(currentLogPath);
        final String currentOptPath = Configurator.configFile;
На вот этот блок, в другом классе main "Launcher":
Java
1
2
3
4
5
6
7
8
9
10
11
public static String LogCreator(String currentLogPath)
    {
     long date = System.currentTimeMillis(); //пытаемся получить текущую дату для имени файла.
     short dateShort = (short)date;
 
            String newFilesName = ("./log-" + dateShort + ".txt");
            File logFile = new File(newFilesName);
            currentLogPath = (logFile.getPath());
    
    return currentLogPath;
     }
Но висит ошибка на строке "final String currentLogPath = Launcher.LogCreator(currentLogPath);"
Мне сообщается, что локальная переменная currentLogPath могла быть не инициализирована. Я уже сто имен перебрал и оба блока на одну переменную переименовывал currentLogPath и тут и там - безрезультатно. Что значит не инициализирована, если ясно указано чему она равна?

Добавлено через 1 час 57 минут
Исправил так:
Java
1
2
3
private static String curLogPath;
public static String createLogFile = (Launcher.logCreator(curLogPath));
final static String currentLogFile = createLogFile;
И вынес все то дело наверх, к оглавлению второго класса. Заработало... Но хочется точно услышать, можно ли было исправить иначе и в каких всех местах я ошибся.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.09.2015, 08:20
Ответы с готовыми решениями:

Ошибка 4700, переменная инициализирована
Написала программу для подсчета количества различных дней недели в году. Выдает ошибку 4700 - использована не инициализированная локальная...

Сделать что бы переменная не могла быть больше 100, -100?
Подскажите пожалуйста как сделать что бы переменная не могла мыть больше 100 и меньше -100, но если переменная превысело 100 оно...

Пробная запись в БД: где могла бы быть ошибка?
Дорогие друзья ! Меня зовут Влад, всем доброго времени суток. У меня свеженькие БД и таблица под названием "zzz" к ней......

10
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
18.09.2015, 08:25
Java
1
final String currentLogPath = Launcher.LogCreator(currentLogPath);
В чем смысл этой строки? Какое значение, по-твоему, должна принимать строка, которую ты передаешь в метод?
Если она объявленаа раньше то ты не можешь присвоить ее теперь. Если она не объявлена раньше то что ты передаешь?
1
 Аватар для KiraLis39
9 / 10 / 1
Регистрация: 23.07.2014
Сообщений: 346
18.09.2015, 09:58  [ТС]
Да, начинает плавно доходить уже -_- Не мог точно понять что в скобках там вообще указывается, то ли передаваемое, то ли то что получаем, то ли то же имя должно быть что у запрашиваемого метода..
0
59 / 60 / 37
Регистрация: 24.07.2015
Сообщений: 224
18.09.2015, 13:22
В скобках — то, что подаёшь в метод, а после «return», то что метод возвращает. Так что «currentLogPath» можно в метод не подавать, так как он на конечный результат не влияет, а объявить внутри метода. А ещё лучше сделать так:

Java
1
2
3
4
5
6
7
8
public static String LogCreator()
{
  long date = System.currentTimeMillis(); //пытаемся получить текущую дату для имени файла.
  short dateShort = (short)date;
  String newFilesName = ("./log-" + dateShort + ".txt");
  File logFile = new File(newFilesName);
  return logFile.getPath();
}
и соответственно вызывать его

Java
1
final String currentLogPath = Launcher.LogCreator();
1
 Аватар для KiraLis39
9 / 10 / 1
Регистрация: 23.07.2014
Сообщений: 346
18.09.2015, 14:05  [ТС]
Как? А разве так он не ругается, что я видите ли ничего не передаю? Пытался удалять - жаловался, что не задан стринг в типе "что-то там(String)"
0
59 / 60 / 37
Регистрация: 24.07.2015
Сообщений: 224
18.09.2015, 15:28
Лучший ответ Сообщение было отмечено KiraLis39 как решение

Решение

Проверил — не ругается, если вызов (как писал ранее) — такой:

Java
1
final String currentLogPath = Launcher.LogCreator();
а описание метода такое:

Java
1
2
3
4
public static String LogCreator()
{
...
}
1
 Аватар для KiraLis39
9 / 10 / 1
Регистрация: 23.07.2014
Сообщений: 346
19.09.2015, 04:17  [ТС]
Блин, как же у меня не получился вариант такой, не удалял имя из обоих вариантов чтоли.. Но, раз работает, значит не буду тупить в след раз, тем более, что уже понял примерно как надо делать, спасибо.

Добавлено через 3 часа 34 минуты
Есть еще один интересный момент. Может быть кто-то знает причину происходящего? Уж не знаю плохо то или нормально.

Добавлено через 14 секунд
Дело в том, что код выглядит так:
Java
1
2
3
4
5
final static String createLogFile = (Launcher.logCreator());
    private static String currentLogPath = createLogFile; //создаем авариийную копию. Не изменяется далее.
    
    final static String configFile="./data/conscr/" + Params.userName + "-config.ini"; // Строка для имени файла
    private static String currentOptPath = configFile;
Добавлено через 42 секунды
Так вот, я консолю результат, мониторю, чтобы видеть все ошибки. Консоль мне выдает после запуска вот такое:

Трекер: сейчас currentLogPath = .\data\log_04-12.txt
Трекер: createLogFile = .\data\log_04-12.txt
Трекер: а currentOptPath = ./data/conscr/none-config.ini
Трекер: и configFile = ./data/conscr/none-config.ini

Добавлено через 17 секунд
Вопрос - какого там слеш такой, а во втором примере другой?

Добавлено через 1 минуту
Ведь в лаунчере у меня точно так же указан путь с /
И здесь тоже /

Откуда он берет, вроде как невоспринимаемые верно Явой знаки \

Добавлено через 51 секунду
Вот код из лаунчера для наглядности и доказательства, может кто поймет
Java
1
2
3
4
5
6
7
8
9
10
public static String logCreator()
    {
     long curTime = System.currentTimeMillis(); //пытаемся получить текущую дату для имени файла.
     String currentDate = new SimpleDateFormat("HH-mm").format(curTime); // HH mm - добавлено мной, не тестировалось!
 
            String newFilesName = ("./data/log_" +((String)currentDate)+ ".txt");
            File logFile = new File(newFilesName);
    
    return (logFile.getPath());
     }
0
59 / 60 / 37
Регистрация: 24.07.2015
Сообщений: 224
21.09.2015, 09:17
Потому что в Виндоус слэши такие «\» и в данных случаях

Java
1
2
3
4
5
String newFilesName = ("./data/log_" +((String)currentDate)+ ".txt");
File logFile = new File(newFilesName);final static String configFile="./data/conscr/" + Params.userName + "-config.ini"; // Строка для имени файла
private static String currentOptPath = configFile;
Ява меняет автоматически слэш с такого «/» на такой «\» (видимо для совместимости между Виндоус/Линукс/Мак), чего скажем, компиляторы других языков не делают и просто бы генерировалась ошибка о не возможности создать файл.

Поэтому можно сделать так:

Java
1
2
3
String newFilesName = (".\\data\\log_" +((String)currentDate)+ ".txt");final static String configFile=".\\data\\conscr\\" + Params.userName + "-config.ini";
и всё будет работать.
1
 Аватар для KiraLis39
9 / 10 / 1
Регистрация: 23.07.2014
Сообщений: 346
21.09.2015, 16:08  [ТС]
Ну так и то и то же файлы в папках, почему там \ а там /?

Добавлено через 51 секунду
Консоль то одновременно работает и код тоже. И фалы оба материальные текстовики.
0
59 / 60 / 37
Регистрация: 24.07.2015
Сообщений: 224
22.09.2015, 09:05
Лучший ответ Сообщение было отмечено KiraLis39 как решение

Решение

Где есть такой слэш «/» там показывает путь, который ты ввёл вручную, как например здесь:

Java
1
2
3
4
5
final static String configFile="./data/conscr/" + Params.userName + "-config.ini";
private static String currentOptPath = configFile;
 
Трекер: а currentOptPath = ./data/conscr/none-config.ini
Трекер: и configFile = ./data/conscr/none-config.ini
а где такой «\» там уже ява выдаёт, такой слэш, который и должен быть, как например здесь:

Java
1
2
3
4
5
6
7
8
9
10
11
12
public static String logCreator()
{
  ...
  File logFile = new File(newFilesName);  
  return (logFile.getPath()); // здесь программа возвращает правильный путь с правильными слэшами!!!
}
 
final static String createLogFile = (Launcher.logCreator());
private static String currentLogPath = createLogFile;
 
Трекер: сейчас currentLogPath = .\data\log_04-12.txt
Трекер: createLogFile = .\data\log_04-12.txt
1
 Аватар для KiraLis39
9 / 10 / 1
Регистрация: 23.07.2014
Сообщений: 346
22.09.2015, 11:48  [ТС]
ладно.. пока сделаю вид, что все так и задумано.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.09.2015, 11:48
Помогаю со студенческими работами здесь

Ошибка: "переменная proverka не инициализирована"
Здравствуйте. Выводится ошибка, в которой пишет,что переменная proverka не инициализирована. Не знаю как исправить. Задание и снимок ошибки...

Переменная не инициализирована
консольное окно не активно

Переменная не инициализирована
Всем привет решил написать простенький класс.Вот обьявление: #pragma once #include <iostream> #include <windows.h> ...

Переменная не инициализирована
Доброго времени суток. Tree.h #pragma once #include <iostream> template<typename T> struct Tree {

Проверить, что переменная не инициализирована
Кто знает, как узнать, записано ли какое-либо значение в переменную любого типа (char *, массив, структура...)?


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru