Найти тему

Весёлая Java #1. Как поменять значения переменных друг с другом при помощи дополнительной переменной и с помощью XOR

Весёлые картинки
Весёлые картинки

Как-нибудь потом напишу, как я докатилась до жизни такой, пока просто: начала изучать программирование с байт-код-языка Java. А так как обычные упражнения выполнять скучно, начала чудить с кодом.

Итак, задача: Составить программу обмена значениями двух переменных величин a=5 и b=7.

Простой код будет выглядеть так:

int a = 5;

int b = 7; //объявляем целочисленные переменные a и b

System.out.println("a=" + a);

System.out.println("b=" + b); //выводим значения переменных на экран

a ^= b;

b ^= a;

a ^= b; //меняем значения переменных друг с другом

System.out.println("a=" + a);

System.out.println("b=" + b); // выводим значения на экран

Почему xor работает так? Пока для меня это магия.

Примечание: поискала информацию построчного разбора изменения значения переменных, но ничего понятного мне на данном этапе не нашла, если кто сможет помочь с этим - напишите, пожалуйста, в комментариях. Ну, что пока не поняли - то запомнили, поймем, когда будем лучше разбираться, а пока пусть тут побудет картинка.
Примечание: поискала информацию построчного разбора изменения значения переменных, но ничего понятного мне на данном этапе не нашла, если кто сможет помочь с этим - напишите, пожалуйста, в комментариях. Ну, что пока не поняли - то запомнили, поймем, когда будем лучше разбираться, а пока пусть тут побудет картинка.

А теперь, собственно, извратим код повеселимся! Копируем в компилятор (я использую кодингграунд) и наслаждаемся/ужасаемся!

public class HelloWorld

{

public static void main(String []args)

{

int a = 5;

int b = 7;

System.out.printf("В этой сказке нет порядка: \nЧто ни строчка - то загадка. \nРасскажу сейчас тебе, \nЖили-были a (равное %d) и b (равное %d). \n \n", a, b);

a ^= b;

b ^= a;

a ^= b;

System.out.printf("Жили-были, не скучали, \nНо потом один урод \nИм значенья переставил, \nТут же наши числа стали \na и b наоборот! \n \nПосмотрите-ка, друзья! \nВот вам b (равное %d)! А вот вам a (равное %d)! \n", b, a);

}

}

-3

Ну и разбор задачки на присвоение значения трех переменных с объявлением дополнительной.

Составить программу обмена значениями трех переменных величин а = 2, b = 3, c = 1 по следующей схеме:
а) b присвоить значение c, а присвоить значение b, с присвоить значение а;
б) b присвоить значение а, с присвоить значение b, а присвоить значение с.

public class HelloWorld

{

public static void main(String []args)

{

int a = 2;

int b = 3;

int c = 1; //создаем целочисленные переменные

System.out.printf("a = %d; \nb = %d; \nc = %d; \n", a, b, c); //выводим их значения на экран

System.out.println("\n"); //вставляем пустую строку

System.out.println("b присвоить значение c, а присвоить значение b, с присвоить значение а"); //выводим на экран задание

int num = b; //вводим дополнительную переменную num для значения b

b = c; //присваиваем значение с уже существующей переменной b

c = a; //присваиваем значение a уже существующей переменной с

a = num; // присваиваем значение num, равное изначальному значению b уже существующей переменной a

System.out.printf("a = %d; \nb = %d; \nc = %d; \n", a, b, c); //выводим на экран значения переменных с изменёнными значениями

System.out.println("\n");

System.out.println("b присвоить значение а, с присвоить значение b, а присвоить значение с");

num = b;

b = a;

a = c;

c = num;

System.out.printf("a = %d; \nb = %d; \nc = %d; \n", a, b, c);

System.out.println("\n");

System.out.printf("Боги Java требуют жертвы: присвойте переменным a, b, c соответственно значения c, a, b.");

}

}

Слава Богам Java!

До новых встреч!