Java. Почему изменяется переменная класса? Не могу понять, почему изменяется переменная класса, хотя в сортировке она не участвует вовсе.
Нужно объяснение именно на этом примере, т.к. переписать так, что бы работало я могу.package cesar;
import java.io.PrintStream;
import java.util.Scanner;
public class Cesar {
private static Scanner sc = new Scanner(System.in);
private static PrintStream pr = new PrintStream(System.out);
private static char[] alphabet;
private static char[] revAlphabet;
static
{
alphabet = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ".toLowerCase().toCharArray();
revAlphabet = getReverseAlphabet();
}
public static void main(String[] args) {

}
private static char[] getReverseAlphabet() {
int step = 3;
char[] rev = alphabet;
for (char c : alphabet) //test 1
{
pr.print(c);
}
pr.println();
for (int i = 0; i < step; i++)
{
for (int k = 0; k

21 Авг 2019 в 07:05
459 +1
0
Ответы
1

Проблема здесь заключается в том, что вы в методе getReverseAlphabet() работаете с переменной rev, которая ссылается на тот же массив, что и переменная alphabet, так как вы присвоили rev = alphabet. Это означает, что при изменении rev вы также изменяете alphabet, потому что обе переменные ссылаются на один и тот же объект в памяти.

Для того чтобы избежать этой проблемы, вам нужно создать отдельный массив для переменной rev, вместо того чтобы просто присваивать rev = alphabet. Вы можете сделать это, например, с помощью метода clone():

private static char[] getReverseAlphabet() {
int step = 3;
char[] rev = alphabet.clone();
// ваш код дальше
}

Таким образом, вы создадите копию массива alphabet и будете работать с отдельным массивом rev, не изменяя при этом значения оригинального массива alphabet.

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир