Можно ли поменять местами два числа с помощью класса-обертки в Java без создания какого-либо другого класса? - PullRequest
0 голосов
/ 16 декабря 2018

Вот мой код для замены двух чисел с использованием класса-обертки. Мне известно о том факте, что Java имеет только передачу по значению, поэтому мы не можем использовать что-то вроде указателя для передачи адреса переменных. Для этого я создал объектыдля класса-оболочки Целое число a, b.
Но этот код не работает, комментарии в разделе кода объясняют мой подход. Может кто-нибудь сказать, пожалуйста, где я ошибся.

class swp{

public static void main(String[] args) {
Integer x = new Integer(5);  //x --> obj with 5 int value
Integer y = new Integer (6); //y --> obj with 6 int value


System.out.println("x = "+ x+ "   " +"y = " + y);
swap(x,y);
System.out.println("x = " + x+ "   " +"y = " + y);
}


//the values in x and y are copied in a and b 



static  void swap(Integer a,Integer b){         //a ,x--> obj with 5 int value .b,y --> obj with 6 int value
        int temp = a.intValue();              // temp contains 5
        a = b.intValue() ;                   // value at the obj ref. by a has changed to 6
        b = temp;                          //value at the obj ref. by a has changed to 5


        System.out.println("in func :  "+"a = " + a+ "   " +"b = " + b);       
}

}

вывод

 a = 5   b = 6
 in func :  a = 6   b = 5
 a = 5   b = 6

Я знаю, что мог бы сделать это, используя следующий подход

void swap(class_name obj1,class_name obj2){
       int temp = obj1.x;
       obj1.x =obj2.x;
       obj2.x = temp;
}

Но я хочу знать, что именно не так смой подход.

1 Ответ

0 голосов
/ 16 декабря 2018

Не используется Integer напрямую, но вы можете использовать массив Integer (или int).Например,

public static void main(String[] args) {
    int[] arr = { 5, 6 };
    System.out.println("a = " + arr[0] + "   " + "b = " + arr[1]);
    swap(arr);
    System.out.println("a = " + arr[0] + "   " + "b = " + arr[1]);
}

private static void swap(int[] arr) {
    int t = arr[0];
    arr[0] = arr[1];
    arr[1] = t;
}

, который выводит

a = 5   b = 6
a = 6   b = 5

или создает POJO-подобие,

class MyPair {
    private int a;
    private int b;

    public MyPair(int a, int b) {
        this.a = a;
        this.b = b;
    }

    public String toString() {
        return String.format("a = %d, b = %d", a, b);
    }

    public void swap() {
        int t = a;
        a = b;
        b = t;
    }
}

Тогда вы можете сделать

public static void main(String[] args) {
    MyPair p = new MyPair(5, 6);
    System.out.println(p);
    p.swap();
    System.out.println(p);
}

Для того же результата.

...