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

String в рекурсии

27.12.2016, 01:08. Показов 847. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Пытаюсь разобраться в рекурсии и столкнулся со следующей проблемой: при выполнении итераций рекурсии переменная String изменяется не только внутри итерации, но и за её пределами. Вот пример:
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
package com.company;
 
public class Main {
 
    public static void main(String[] args) {
 
        String[] s = new String[4];
        for (int i=0;i<3;i++){
            s[i] = "-";
        }
        String[] someString = test(s, 3);
    }
 
    static String[] test(String[] string, int k){
        string[k] = String.valueOf(k);
        String[] backup = string;
        int n = k;
        System.out.println("До рекурсии при k=" + k + ", backup = "+backup[0]+backup[1]+backup[2]+backup[3]+", а переменная int n="+n);
        if (!(k==0)){
            string = test(string,k-1);
        }
        System.out.println("После рекурсии при k=" + k + ", backup = "+backup[0]+backup[1]+backup[2]+backup[3]+", а переменная int n="+n);
        return(string);
    }
}
Программа выведет следующее:
До рекурсии при k=3, backup = ---3, а переменная int n=3
До рекурсии при k=2, backup = --23, а переменная int n=2
До рекурсии при k=1, backup = -123, а переменная int n=1
До рекурсии при k=0, backup = 0123, а переменная int n=0
После рекурсии при k=0, backup = 0123, а переменная int n=0
После рекурсии при k=1, backup = 0123, а переменная int n=1
После рекурсии при k=2, backup = 0123, а переменная int n=2
После рекурсии при k=3, backup = 0123, а переменная int n=3

Написал большую и сложную программу, долго обдумывал логику, потом ещё и часа 4 искал в чем дело и наконец нашел. Подскажите пожалуйста: как сделать так, чтобы переменная String не изменялась в других итерациях?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.12.2016, 01:08
Ответы с готовыми решениями:

Использование рекурсии для String Array Java
Write a RECURSIVE program to solve this problem: You are given an array of strings like this: “8” “+” “9” “*” “4” “*” “2” ...

Нельзя преобразовать тип Tuple<string,string,string,string> к string
Здравствуйте, у меня возникла проблема. При запуске кода, вылезает ошибка &quot;Нельзя преобразовать тип...

Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population
Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population. Создание объектов может происходить как без...

3
 Аватар для Vadimushka D
2 / 2 / 0
Регистрация: 06.09.2014
Сообщений: 51
27.12.2016, 09:44
string[k] = String.valueOf(k);
String[] backup = string;
Поменяй местами, то что ниже поставь выше, а то что выше поставь ниже
0
0 / 0 / 0
Регистрация: 03.03.2015
Сообщений: 2
27.12.2016, 10:40  [ТС]
Посидев ночь, всё же понял свою глупость: тут проблема не в том, что это String, а String[] (или любой другой массив).
Java
1
String[] backup = string;
Передаёт ссылку, а мне надо было сохранить значения.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,765
29.12.2016, 17:21
Цитата Сообщение от shin_dozer Посмотреть сообщение
Передаёт ссылку, а мне надо было сохранить значения.
Есть замечательный класс Arrays с кучей полезных статических методов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.12.2016, 17:21
Помогаю со студенческими работами здесь

Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population
Здравствуйте! По C# есть задачка, с которой я так и не разобрался :( Задача: Создайте класс Animal. Добавьте поля string...

Ошибка PHPOfice: Cannot use PhpOffice\PhpWord\Shared\String as String because 'String' is a special class name
Fatal error: Cannot use PhpOffice\PhpWord\Shared\String as String because 'String' is a special class name in...

Доступ к паре в map<string, vector<pair<string, string>>>Temp
Подскажите пожалуйста как получить данные в векторе пар ? void showData(const map&lt;string, vector&lt;pair&lt;string,...

List<string, string, string> есть ли в C# что-то подобное?
Мне надо добавить в List не только имя файла, но и некоторые строки из этого файла. Т.е. например, у меня есть в определенном директории...

AsyncTask<String, String, String> объясните пожалуйста
При описаний класса наследника AsyncTask мы в угловых скобках указываем три типа данных: 1. Тип входных данных. Это данные которые пойдут...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru