Змінюй хід війни! Допомагай ЗСУ!

Примитивная задачка на Java

  • Автор теми Автор теми vasyabosoy2
  • Дата створення Дата створення
Статус: Офлайн
Реєстрація: 30.03.2011
Повідом.: 148
Примитивная задачка на Java

Простая задачка на java. Надо поменять два числа местами. Обычная функция Swap.
Вот собственно код.
Код:
public class Search {
	
	static void swap(Integer a, Integer b)
	{
		int change;
		change = a;
		b = a;
		a = change;
	}
	
	public static void main(String args[])
	{
		Integer a = 5, 
			b = 10;
		swap(a, b);
		System.out.print(a + " " + b);
	}
}

Результат: 5 10.
Вопрос: как изменить значение из функции?
Integer это ж вроде объект, в отличии от int, если нет то каким классом(существующим в java) можно заменить Integer чтоб это был объект и с ним можно было работать как с объектами классов созданных мной?
 
Останнє редагування:
Останнє редагування:
это иммутабле объект.

изменяй тип обьекта (например используй массив интов, он будет передаваться по ссылке)
измени тип вывода
и т.д.

Это все понятно.
Но, неужели не существует стандартного класса Java для таких вещей?

Типа надо самому сделать класс:
Код:
public class MutableInteger {
    private int value;
    public MutableInteger(int value) {
        this.value = value;
    }
     public get()
     {...}
     public set()
     {...}
     ....
     и т.д.
    }
Вроде как тривиальная задача, неужели нет подобного в стандартной библиотеке? Ведь это вроде как удобней, чем упаковывать в массив перед отправкой в метод...
 
нет подобного в стандартной библиотеке?
нет. ну разве что-то какое-то связанное с многопоточностью, но для обычного случая не вижу смысла её использовать.
В стандартную библиотеку делать оболочку под каждый простой тип? проще думаю использовать generic
 
Да, Integer в джаве immutable, так что или написать свой кастомный класс-обертку, или в массив, или попробовать что-то типа org.apache.commons.lang.mutable.MutableInt...
Кстати, в swap там ошибка вроде у тебя? она так сделает b = a, a = a.
 
Ну смотря для чего это нужно конечно, можно вообще заинлайнить этот обмен несчастный и не морочить голову:) Если это какой-то подъеб на собеседовании - это одно, а если действительно очень нужно, то можно и замутить что-то посложнее...
 
Кстати, в swap там ошибка вроде у тебя? она так сделает b = a, a = a.

да, есть такое, не углядел.

можно вообще заинлайнить этот обмен несчастный и не морочить голову:)

В Java есть встроенные функции?
 
Может, это задача на область видимости переменных?
Тогда можно предложить такой вариант - перенести объявление переменных a и b из метода main в класс. У обоих методов будет доступ к одним и тем же переменным.
Код:
public class Search {

	static Integer a = 5, b = 10;
	
	static void swap(Integer a, Integer b)
	{
		Search.b = a;
		Search.a = b;
	}
	
	public static void main(String args[])
	{
		swap(a, b);
		System.out.println(a + " " + b);
	}
}
 
Можно так:
Код:
public class Search {
    static Integer a, b;
    static void swap(Integer a, Integer b)
    {
        Integer change = a;
        Search.a = b;
        Search.b = change;
    }

    public static void main(String args[])
    {
        a = 5; b = 10;
        swap(a, b);
        System.out.println(a + " " + b);
    }
}
или
Код:
public class Search {
    static class Ab {
        Integer a, b;

        void swap()
        {
            Integer change = a;
            a = b;
            b = change;
        }
    }

    public static void main(String args[])
    {
        Ab ab = new Ab();
        ab.a = 5; ab.b = 10;
        ab.swap();
        System.out.println(ab.a + " " + ab.b);
    }
}
или
Код:
public class Search {
    static class Ab {
        Integer a, b;

        void swap(Integer a, Integer b)
        {
            this.a = b;
            this.b = a;
        }
    }

    public static void main(String args[])
    {
        Ab ab = new Ab();
        ab.a = 5; ab.b = 10;
        ab.swap(ab.a, ab.b);
        System.out.println(ab.a + " " + ab.b);
    }
}
Может быть что-то из этого решает задачу?
 
В джаве передача только по значению.
 
плюс шарпу за ref, out. Неужели за 8мь версий архитектура не позволила? Или нужды нет получать результат не только ретурном? Для "красивых" конструкций кода.
 
что значит "по ошибке"? методы не ошибаются. Если метод класса позволяет что-то делать с членами класса, то значит так задумано. И не о том речь. Речь о том что метод внутри подставит по переданной ссылке другой инстанс класса. А это можно сделать только намерено, и с некой целью. А если что-то пишется "по ошибке", то тут никакие ограничения не помогут.
 
Назад
Зверху Знизу