CodeGym /جاوا بلاگ /Random-SD /جاوا ۾ شيون ڪيئن بدلجي؟
John Squirrels
سطح
San Francisco

جاوا ۾ شيون ڪيئن بدلجي؟

گروپ ۾ شايع ٿيل
شين کي تبديل ڪرڻ پروگرامنگ ۾ سڀ کان وڌيڪ مشهور عملن مان هڪ آهي. اهو خاص طور تي ترتيب ڏيڻ ۾ مفيد آهي. ادل بدلڻ ۾ ڇا ٿئي ٿو ٻه متغير آهن انهن جي قدرن کي مٽائي. هن آرٽيڪل ۾، اسان سکو ته ڪيئن جاوا ۾ شيون تبديل ڪيون وڃن ٻن مختلف ڪيسن ۾. هڪ آزاد شين کي تبديل ڪري رهيو آهي ۽ ٻيو هڪ فهرست يا هڪ آري ۾ ٻن شين کي تبديل ڪري رهيو آهي. اچو ته پهرين آزاد شين کي تبديل ڪرڻ جو جائزو وٺون.جاوا ۾ شيون ڪيئن بدلجي؟  - 1

شيون تبديل ڪرڻ بنيادي ڊيٽا جي قسمن کي تبديل ڪرڻ کان مختلف آهي

ھڪڙو عام طريقن مان ھڪڙو استعمال ڪرڻ لاء استعمال ڪرڻ لاء ابتدائي قدرن کي تبديل ڪرڻ لاء ھڪڙو عارضي متغير استعمال ڪندي آھي. جڏهن ته، توهان ڄاڻو ٿا ته جاوا استعمال ڪندو آهي "پاس بائي ويليو" جڏهن هڪ طريقي سان پيٽرول پاس ڪري ٿي. تنهن ڪري، شيون تبديل ڪرڻ ڪم نه ڪندو جيئن توهان هن طريقي سان توقع ڪئي هئي. هيٺ ڏنل مثال ان کي ڏيکاريندو.
public class ObjectSwapper {
    public static void main(String[] args) {
        InnerClass obj1 = new InnerClass(12345);
        InnerClass obj2 = new InnerClass(11111);
        swap(obj1, obj2);
        System.out.println("Obj1 ID value : " + obj1.id + "\n" + "Obj2 ID value :  " + obj2.id);
    }
    static void swap(InnerClass x, InnerClass y) {
        InnerClass temp;
        temp = x;
        x = y;
        y = temp;
    }
    static class InnerClass {
        public int id;
        public InnerClass(int Id) {
            this.id = Id;
        }
    }
}
ٻاھر نڪتو: جاوا ۾ شيون ڪيئن بدلجي؟  - 2ڪا به ادل نه ھئي! جڏهن اسان swap طريقي کي سڏين ٿا ۽ شيون پاس ڪريون ٿا، اسان سڀني ملڪيت جي قيمتن سان، اعتراض جي هڪ نقل پاس ڪريون ٿا. اهو ئي سبب آهي جو ان کي ”Pass by Value“ چئبو آهي. ادل بدلڻ جو طريقو اصل ۾ شيون تبديل ڪري ٿو جيڪو صرف اصل اعتراض جي ڪاپي تي اثر انداز ڪري ٿو. تنهن ڪري اصل شيون اڻڄاتل رکيل آهن. ان جو حل اهو هوندو ته ٻن شين کي لفافي ڪرڻ لاءِ ريپر ڪلاس استعمال ڪيو وڃي.

شين کي مٽائڻ واري ڪلاس سان

public class ObjectSwapper {
    public static void main(String[] args) {

        InnerClass obj1 = new InnerClass(12345);
        InnerClass obj2 = new InnerClass(11111);
        objectWrapper wrapperObj1 = new objectWrapper(obj1);
        objectWrapper wrapperObj2 = new objectWrapper(obj2);
        // Values before swapping
        System.out.println("WrapperObj1 InncerClass ID value : " + wrapperObj1.innerObject.id + "\n" + "WrapperObj2 InncerClass ID value : "
                + wrapperObj2.innerObject.id + "\n");

        swap(wrapperObj1, wrapperObj2);

        // Values after swapping
        System.out.println("WrapperObj1 InncerClass ID value : " + wrapperObj1.innerObject.id + "\n" + "WrapperObj2 InncerClass ID value : "
                + wrapperObj2.innerObject.id);
    }

       static void swap(objectWrapper wrapperObj1, objectWrapper wrapperObj2) {
        InnerClass temp;
        temp = wrapperObj1.innerObject;
        wrapperObj1.innerObject = wrapperObj2.innerObject;
        wrapperObj2.innerObject = temp;
    }

    static class InnerClass {
        public int id;
        public InnerClass(int Id) {
            id = Id;
        }
    }

    static class objectWrapper {
        InnerClass innerObject;
        public objectWrapper(InnerClass objInnner) {
            this.innerObject = objInnner;
        }
    }
}
هتي اسان هڪ لفافي ڪلاس استعمال ڪيو آهي جنهن ۾ هڪ ملڪيت آهي ان قسم جي شين جي جنهن کي اسان کي تبديل ڪرڻ جي ضرورت آهي. هڪ سادي ادل واري طريقي کي استعمال ڪندي، اهو لفافي ڪلاس جي شين جي اندروني ڪلاس شين جي مواد کي تبديل ڪري ٿو. تبديل ٿيل InnerClass شين جي ڪنهن به وڌيڪ عمل ڪرڻ لاء، اسان استعمال ڪري سگھون ٿا wrapperObj1.xyz ۽ wrapperObj2.xyz مطابق. پيداوار:جاوا ۾ شيون ڪيئن بدلجي؟  - 3

جاوا ۾ بلٽ ان swap() طريقو

جاوا ڪليڪشن فريم ورڪ جي ڪلاسن ۾ عنصرن کي مٽائڻ لاءِ بلٽ ان طريقو آهي جنهن کي swap() سڏيو ويندو آهي . java.util ھڪڙو يوٽيلٽي ڪلاس آھي جنھن ۾ جامد طريقا شامل آھن جيڪي عناصر تي ڪم ڪري سگھن ٿا جهڙوڪ فهرستن مان ڪليڪشن انٽرفيس. swap طريقو استعمال ڪرڻ تمام آسان آھي مثال جي ڀيٽ ۾ جيڪو اسان اڳ ۾ بحث ڪيو آھي. swap () طريقو ھڪڙو جامد طريقو آھي ۽ تنھنڪري توھان ان کي ڪلاس جي نالي سان سڏيو جيئن Collections.swap() . swap() طريقي جي واپسي جو قسم باطل آھي تنھنڪري اھو ڪجھ به واپس نه ڪندو. توھان کي ٽي دليلن کي پاس ڪرڻ جي ضرورت آھي swap() طريقي سان. هيٺ ڏنل نوٽ چيڪ ڪريو.
swap(List<?> list, int a, int b)
پيرا ميٽرس:
  • list - فهرست ۾ شامل آهن عناصر جيڪي اسان تبديل ڪندا آهيون.
  • a - تبديل ٿيڻ واري عنصر جي انڊيڪس .
  • b - ٻئي عنصر جي انڊيڪس کي تبديل ڪيو وڃي .
نوٽ ڪريو ته هي طريقو هڪ IndexOutOfBoundsException اڇلائي ڇڏيندو جيڪڏهن يا ته a يا b فهرست جي سائيز جي حد کان ٻاهر آهي. فهرست جي وڌ ۾ وڌ انڊيڪس فهرست جي سائيز کان گھٽ آھي. ان کان وڌيڪ ڪا به انڊيڪس قيمت انڊيڪس آئوٽ آف بائونڊز ايڪسيپشن کي اڇلائي ويندي. ArrayList تي swap طريقو استعمال ڪرڻ جو هڪ مثال هيٺ ڏيکاريل آهي.

swap() طريقو هڪ ArrayList تي

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ArrayListSwapper {
    public static void main(String[] args) {
        try {
            List fruits = new ArrayList();
            fruits.add("Mango");
            fruits.add("Papaya");
            fruits.add("Apple");
            fruits.add("Orange");
            fruits.add("Watermelon");
            fruits.add("Bael");
            System.out.println("Before swapping : " + fruits);
         //using Collection.swap() method
            Collections.swap(fruits, 2, 5);
            System.out.println("After swapping : " + fruits);
        } catch (IndexOutOfBoundsException e) {
            System.out.println("Index Out of Bound Exception thrown : " + e);
        }
    }
}
ميون جي ArrayList ڇهن عناصر تي مشتمل آهي. اسان فنڪشن swap() طريقي سان استعمال ڪندي 2nd ۽ 5th عناصر کي تبديل ڪندا آهيون . بهترين عمل swap() طريقو لکڻ جي ڪوشش-ڪيچ بلاڪ جي اندر آهي جيئن اهو رن ٽائم تي هڪ IndexOutOfBoundsException اڇلائي سگهي ٿو. ٻاھر نڪرندو: جيڪڏھن اسان '2' ۽ '8' کي انڊيڪس جي طور تي پاس ڪريون ٿا ته ايپليڪيشن ھڪڙي استثنا اڇلائي ويندي جيئن لسٽ جي سائيز ڇھ آھي. جاوا ۾ شيون ڪيئن بدلجي؟  - 4
Collections.swap(fruits, 2, 8);
پيداوار ٿي ويندي:جاوا ۾ شيون ڪيئن بدلجي؟  - 5

نتيجو

ھن سبق ۾، اسان جاوا ۾ استعمال ٿيندڙ ڪجھ ادل بدلائڻ واري ٽيڪنڪ تي بحث ڪيو. انهن مان هڪ ريپر ڪلاس استعمال ڪري رهيو آهي ۽ ٻيو استعمال ڪري رهيو آهي Collection.swap() طريقو. اهو ياد رکڻ ضروري آهي ته استثنا هينڊلنگ ٿيڻ گهرجي جڏهن فنڪشن swap() استعمال ڪيو وڃي جيئن اهو رن ٽائم استثنا اڇلائي.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION