|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
||||||
Инициализация переменных08.07.2024, 16:24. Показов 876. Ответов 18
Здравствуйте, умники и знатоки!
У меня есть цена товара и я ее в функции высчитываю. ТОваров может быть много, поэтому необходимо сделать итоговую цену. обЪявила необходимые переменные. Инициализация происходит через set/get. В изначальной функции создаю объект ИтоговыеПеременные для установки переменных.
после инициализации и выхода с метода, а потом со второго захода в этот метод getTotalPrice() обнуляется. Я думала, если установлю значение, то оно должно сохранится. Я думаю глобально не надо делать переменную, значит как поступить?
0
|
||||||
| 08.07.2024, 16:24 | |
|
Ответы с готовыми решениями:
18
Инициализация переменных класса Инициализация переменных Инициализация переменных (Spring) |
|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
||||||
| 08.07.2024, 16:44 [ТС] | ||||||
|
Coffeini, total = price * quantity; ))
прикол в том, что set первый раз устанавливает, а после второго вхождения в метод при get переменная TotalPrice = 0, хотя при первом вхождении инициализировалась. для наглядности
0
|
||||||
|
156 / 62 / 16
Регистрация: 12.12.2023
Сообщений: 389
|
|
| 08.07.2024, 16:57 | |
|
Вы уверены что "при втором заходе" вы в тот же самый экземпляр объекта вообще попадаете, а не пересоздаете его где то случайно? Самая частая причина таких полтергейстов вида "было и пропало"
И то что вы для примера написали принципально не может работать из за static
0
|
|
|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
|
| 08.07.2024, 17:15 [ТС] | |
|
Ewlampiy, объект не новый и это точно. Я изначально насчет этого и подумала. Можно по подробней static,почему нет?
0
|
|
|
156 / 62 / 16
Регистрация: 12.12.2023
Сообщений: 389
|
|
| 08.07.2024, 17:25 | |
|
static методы не имеют доступа к полям объекта. они могут оперировать только такими же static полями класса, то есть общими для всех объектов
0
|
|
|
|
|||||||
| 08.07.2024, 17:37 | |||||||
|
Мне в этом случае вообще не нравится решение через static. Поскольку оно не масштабируемо, типа сделать totalPrice по каким-то groupBy, аля Детские товары, Взрослые. Также операция удаления объекта нетривиальна. Не финализаторы же перегружать.
Типа почему бы не ввести сущность корзинки какой-нибудь:
0
|
|||||||
|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
|
| 08.07.2024, 17:50 [ТС] | |
|
Ewlampiy, значит надо попрбоыатEwlampiy,
Ошиблась в написании у меня переменная тоже static и по этом все равно не работает
0
|
|
|
156 / 62 / 16
Регистрация: 12.12.2023
Сообщений: 389
|
|
| 08.07.2024, 19:16 | |
|
Ну не видя кода можно только гаданием заниматься. Может вы допустим в конструкторе обнуляете статик поле, тогда создание вообще любого объекта будет обнулять это поле для всех объектов разом
0
|
|
|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
||||||
| 08.07.2024, 20:30 [ТС] | ||||||
|
Ewlampiy, Coffeini, Сейчас покажу код, которой мне кажется логичен)))
много что убрала, но наверное не то понятие пока,что не вижу ошибку
0
|
||||||
|
156 / 62 / 16
Регистрация: 12.12.2023
Сообщений: 389
|
|||||||||||
| 08.07.2024, 20:35 | |||||||||||
Сообщение было отмечено OdinNastya как решение
Решение
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
|||||||
| 08.07.2024, 21:03 [ТС] | |||||||
|
Ewlampiy, юху, спасибо)
я писала изначально this и оно подсвечивалось,что статик. Я подумала из-за того,что статик, можно this не писать)) хммм,хорошо. Я использую static из-за того,что у меня ругается что метод надо сделать static, а из-за этого другие методы делаю и переменные
0
|
|||||||
|
4 / 3 / 1
Регистрация: 10.05.2024
Сообщений: 10
|
||
| 08.07.2024, 21:14 | ||
|
Если вы пишете в процедурном стиле, и это продиктовано этапом обучения или требованием преподавателя — пусть будет static, ничего страшного. Это проблема, если от вас требовали другого, а вы не разобрались. Программа, которую вы показываете, выглядит недописанной, а функция formationCh делает много разного: и устанавливает значение глобальной переменной, и выводит его, и возвращает, причем все это очень неуклюже. Покажите оригинальный текст задания, тогда может стать понятнее, что от вас ожидается.
0
|
||
|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
|
| 08.07.2024, 21:31 [ТС] | |
|
GrafRebro, вообще просят сформировать чек. Данный брать товаров из файла и записать тоже в файл.
Поэтому передаю в функцию public static String formationCh(List strProduct, int i, String allList) { } все для чека, его формирую и возвращаю строку для дальнейшей записи. На данном этапе надо показать понимание ООП. Добавлено через 1 минуту GrafRebro, программа работает и исключение ловит, но сомневаюсь на адекватность кода))
0
|
|
|
4 / 3 / 1
Регистрация: 10.05.2024
Сообщений: 10
|
||
| 08.07.2024, 21:34 | ||
|
Тогда единственный static остается у функции main. Класс Check делаем «накопителем». Например, у класса может быть метод addProduct. Создаем экземпляр класса, читаем данные из файла, и на каждый продукт добавляем данные методом addProduct. Отдельный метод (toString) может возвращать строку. Это в общих чертах, чтобы не писать решение целиком. В деталях реализации возможны варианты.
0
|
||
|
156 / 62 / 16
Регистрация: 12.12.2023
Сообщений: 389
|
|||||||
| 09.07.2024, 05:21 | |||||||
0
|
|||||||
|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
|
| 09.07.2024, 10:44 [ТС] | |
|
Ewlampiy, точно, спасибо большое
Добавлено через 2 часа 19 минут Ewlampiy, Вопрос, в каких ситуациях надо создавать объект и через название объекта вызывать его методы, а когда просто название класса и его метод? Если я общаюсь между нестатическими классами, то можно просто НазваниеКласса.метод?
0
|
|
|
156 / 62 / 16
Регистрация: 12.12.2023
Сообщений: 389
|
|
| 09.07.2024, 11:28 | |
|
Статические методы - это как правило "утилиты". Ну допустим "округлить сумму до центов". Такому методу не нужно никакой другой информации кроме той суммы что передали в параметре, он "сам по себе" и не привязан ни к какому объекту и его полям. Иногда даже все такие статические методы выносят в отдельный класс, от которого никаких объектов и вовсе не создают. Можно даже специально запретить создавать объекты объявив приватный конструктор.
Ну вот как класс Math например, это просто склад функций типа синус, косинус, округлить. Они и вызываются напрямую как "Math.sin(angle)". А не "new Math().sin(angle)". А статические поля это чаще всего (не обязательно, но чаще) "константы". public static final double PI = 3.14159265358979323846; "Настоящих" констант в джаве нет, но компилятор достаточно умный чтобы при использовании такого PI сразу его значение подставлять, а не доставать его реально из памяти где оно лежит в статической переменной. Ну или что то такое "одно на всех", пусть и не константа. System.out вот например. Допустим вы точно знаете что вот этот вот класс, если создавать из него объект, он все равно будет создан только РОВНО ОДИН и ни в коем случае на две или три штуки. Ну например класс MyConfigurationVariablesFromFile. Возникает соблазн тогда все внутри него объявить статиком и вообще объектов не создавать. И все равно даже в таком случае лучше создать объект, "signleton", тем или иным способом защитившись от создания потенциальных повторных экземпляров. Я говорю не о том, как в джаве вообще "можно", а о том как общепринято, как "сложилось". А возможности писать иначе хоть отбавляй. Но даже если вы всю жизнь в одиночку "для себя" будете писать, все равно всевозможные фреймворки и среды начнут вам палки в колеса вставлять как только вы начнете писать "нетрадиционно". Поставьте какой-нибудь checkstyle и пусть он вас по рукам бьет, хоть и раздражает.
0
|
|
|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
|
| 09.07.2024, 11:36 [ТС] | |
|
Ewlampiy, супер, спасибо большое
0
|
|
| 09.07.2024, 11:36 | |
|
Помогаю со студенческими работами здесь
19
Инициализация static переменных Инициализация обычных статических переменных Инициализация переменных в операторе Switch ООП(зачем нужна инициализация переменных в конструкторе Box) Инициализация переменных Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|