Задать вопрос
stoyanovdmitry
@stoyanovdmitry

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 < rev.length-1; k++)
			{
				char temp = rev[k];
				rev[k] = rev[k+1];
				rev[k+1] = temp;
			}
		}

		for (char c : alphabet)             //test 2
		{
			pr.print(c);
		}
		return rev;
	}
}
  • Вопрос задан
  • 462 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
private static char[] alphabet ?? она?

char[] rev = alphabet; // копируете ссылку на массив. 

//

        char temp = rev[k];
        rev[k] = rev[k+1]; // тут rev[k] то же самое что и alphabet[k] 
        rev[k+1] = temp;

char[] x = {'a','b','c'}; //создаете массив и присваеваете ссылку на массив.
char[] y;
char[] z;

z = y = x;

Sistem.out.prinln(z[0]); // a
System.out.prinln(y[1]); // b
z[2] = 'm';
System.out.println(y[2]); // m
System.out.println(x[2]); // m


Тут еще посмотрите
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
bogdanov-s
@bogdanov-s
Че-то там программирую
char[] rev = Arrays.copyOf(alphabet, alphabet.length);
Ответ написан
Комментировать
@alexfacepalm
Если тебя надо решить кодировку цезаря,то увеличь каждый элемента на 1 (или твой step=3)

for (int k = 0; k < rev.length1; k++) {
rev[k] += 1;//rev[k] += 3;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы