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

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

🟡 12:24 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
Статус: Offline
Реєстрація: 30.03.2011
Повідом.: 148
  • 🟡 12:24 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #1
Примитивная задачка на 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 чтоб это был объект и с ним можно было работать как с объектами классов созданных мной?
 
Останнє редагування:
  • 🟡 12:24 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #2
Останнє редагування:
  • 🟡 12:24 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3
это иммутабле объект.

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

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

Типа надо самому сделать класс:
Код:
public class MutableInteger {
    private int value;
    public MutableInteger(int value) {
        this.value = value;
    }
     public get()
     {...}
     public set()
     {...}
     ....
     и т.д.
    }
Вроде как тривиальная задача, неужели нет подобного в стандартной библиотеке? Ведь это вроде как удобней, чем упаковывать в массив перед отправкой в метод...
 
  • 🟡 12:24 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #4
нет подобного в стандартной библиотеке?
нет. ну разве что-то какое-то связанное с многопоточностью, но для обычного случая не вижу смысла её использовать.
В стандартную библиотеку делать оболочку под каждый простой тип? проще думаю использовать generic
 
  • 🟡 12:24 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #5
Да, Integer в джаве immutable, так что или написать свой кастомный класс-обертку, или в массив, или попробовать что-то типа org.apache.commons.lang.mutable.MutableInt...
Кстати, в swap там ошибка вроде у тебя? она так сделает b = a, a = a.
 
  • 🟡 12:24 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #6
  • 🟡 12:24 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #7
Ну смотря для чего это нужно конечно, можно вообще заинлайнить этот обмен несчастный и не морочить голову:) Если это какой-то подъеб на собеседовании - это одно, а если действительно очень нужно, то можно и замутить что-то посложнее...
 
  • 🟡 12:24 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #8
Кстати, в swap там ошибка вроде у тебя? она так сделает b = a, a = a.

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

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

В Java есть встроенные функции?
 
  • 🟡 12:24 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #9
  • 🟡 12:24 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #10
  • 🟡 12:24 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #11
Может, это задача на область видимости переменных?
Тогда можно предложить такой вариант - перенести объявление переменных 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);
	}
}
 
  • 🟡 12:24 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #12
Можно так:
Код:
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);
    }
}
Может быть что-то из этого решает задачу?
 
  • 🟡 12:24 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #13
  • 🟡 12:24 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #14
В джаве передача только по значению.
 
  • 🟡 12:24 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #15
плюс шарпу за ref, out. Неужели за 8мь версий архитектура не позволила? Или нужды нет получать результат не только ретурном? Для "красивых" конструкций кода.
 
  • 🟡 12:24 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #16
что значит "по ошибке"? методы не ошибаются. Если метод класса позволяет что-то делать с членами класса, то значит так задумано. И не о том речь. Речь о том что метод внутри подставит по переданной ссылке другой инстанс класса. А это можно сделать только намерено, и с некой целью. А если что-то пишется "по ошибке", то тут никакие ограничения не помогут.
 
Назад
Зверху Знизу