JavaRush/Java блог/Архив info.javarush/Кухня(); Задание N13.
terranum
28 уровень

Кухня(); Задание N13.

Статья из группы Архив info.javarush
участников
Кухня(); Задание N13. - 1 Правила [Одномерные массивы] 13. В заданном одномерном массиве поменять местами соседние элементы, стоящие на четных местах, с элементами, стоящими на нечетных.
Комментарии (20)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
RabenokDmitry
Уровень 21
10 февраля 2015, 00:36
public static void swapValue(int[] array) {
        if (array.length <= 2) {
            throw new IllegalArgumentException("Нечего менять");
        }

        for (int i = 1; i < array.length; i += 2) {
            array[i] = array[i] + array[i + 1];
            array[i + 1] = array[i] - array[i + 1];
            array[i] = array[i] - array[i + 1];
        }
    }
Docktor91
Уровень 40
25 августа 2014, 01:25
для дабл не сработает)
terranum
Уровень 28
25 августа 2014, 01:31
За то XOR-ы так коварно выглядят)
Docktor91
Уровень 40
24 августа 2014, 22:55
public static int[] swap(int... arr)
{
    if (arr.length < 2)
        throw new IllegalArgumentException("nothing to swap");
    for (int i = 1; i < arr.length; i += 2)
    {
        arr[i] += arr[i - 1];
        arr[i - 1] = arr[i] - arr[i - 1];
        arr[i] -= arr[i - 1];
    }
    return arr;
}
terranum
Уровень 28
24 августа 2014, 23:10
Ну что тут добавить? Красава! :)

Вот еще пара вариантов, как приготовить без tmp, говорят на собеседованиях это любят.
arr[i] *= arr[i - 1];
arr[i - 1] = arr[i] / arr[i - 1];
arr[i] /= arr[i - 1];

По аналогии через XOR.
arr[i] ^= arr[i - 1];
arr[i - 1] = arr[i] ^ arr[i - 1];
arr[i] ^= arr[i - 1];
Sultan
Уровень 16
25 августа 2014, 00:38
а вот так
Sultan
Уровень 16
25 августа 2014, 00:40
о, да!
Sultan
Уровень 16
25 августа 2014, 00:43
public static int[] method(int[] a) {
    for (int i = 1; i < a.length; i += 2) {
        a[i] ^= a[i - 1] ^= a[i] ^= a[i - 1]; 
    }
    return a;
}
terranum
Уровень 28
25 августа 2014, 01:28
Тогда уже так, а то method барахлит немного.
public static int[] swap(int[] arr)
    {
        for (int i = 1; i < arr.length; i += 2)
        {
            arr[i] = (arr[i] ^ arr[i - 1]) ^ (arr[i - 1] = arr[i]);
        }
        return arr;
    }
terranum
Уровень 28
25 августа 2014, 01:30
Или так:
public static int[] swap(int[] arr)
    {
        for (int i = 1; i < arr.length; i += 2)
        {
            arr[i] = (arr[i] + arr[i - 1]) - (arr[i - 1] = arr[i]);
        }
        return arr;
    }
Airon
Уровень 34
10 сентября 2014, 12:05
Так первый вариант (с делением /) не дееспособен когда переставляется 0.
Kashey
Уровень 11
17 сентября 2014, 11:36
Вопрос:
попробывал скормить методу double
public static void main(String[] args)
    {
        double[] array = {10.3, 113.2, 53.23, 32.0, -2.32, 93.2, 33.2};
        changePlace(array);
        for (double x : array)System.out.print(x + " ");
    }

    public static void changePlace(double... arr)
    {
        for (int i = 1; i < arr.length; i += 2)
        {
            arr[i] += arr[i - 1];
            arr[i - 1] = arr[i] - arr[i - 1];
            arr[i] -= arr[i - 1];
        }
    }

куда теряются знаки после запятой?
113.2 10.299999999999997 31.999999999999993 53.23 93.2 -2.319999999999993 33.2
Спасибо.
Docktor91
Уровень 40
17 сентября 2014, 12:53
попробуй сложить два дабла 0.1 и 0.2 и выведи результат
Kashey
Уровень 11
17 сентября 2014, 12:56
Сложил, получил 0.3 кучу нулей и 4 в конце. вопрос остается открытым. Почему так?
Docktor91
Уровень 40
17 сентября 2014, 12:59
это все из-за двоичного представления числа, я понял эту тему, но не достаточно чтобы объяснить)))
Kashey
Уровень 11
17 сентября 2014, 13:02
значит без темпа, только для целых чисел?
Docktor91
Уровень 40
17 сентября 2014, 13:04
ну можно округлить…
terranum
Уровень 28
17 сентября 2014, 13:13
А как на счет уличной магии?



        Integer x = 100;
        Integer y = 100;
        System.out.println(x == y);
        x = 1000;
        y = 1000;
        System.out.println(x == y);
Docktor91
Уровень 40
17 сентября 2014, 13:15
пфф… кеши
terranum
Уровень 28
17 сентября 2014, 13:15
Блин, вас уже ничем не удивить)