JavaRush /جاوا بلاگ /Random-SD /جاوا مسئلا هڪ چال سان: هيلو، انٽرويو!

جاوا مسئلا هڪ چال سان: هيلو، انٽرويو!

گروپ ۾ شايع ٿيل
JavaRush شاگردن لاءِ ، پروگرامنگ چئلينجز، جاوا، ۽ تصديق ڪندڙ بهترين دوست آهن. تنهن هوندي، هر ڊولپر پاڊوان لاء هڪ وقت اچي ٿو جڏهن توهان کي ڪڏهن ڪڏهن مارڻ واري ٽريڪ کان پري وڃڻ شروع ڪرڻ جي ضرورت آهي، پنهنجي لاء مني پروجيڪٽ سان گڏ، ۽ انٽرويو لاء تيار ڪريو. انٽرويو ۾، اهو لڳي ٿو ته توهان کي ساڳيو ئي عملي جاوا مسئلن کي منهن ڏيڻ گهرجي جيئن ڪورس ۾. اڪثر ڪيسن ۾ اهو سچ آهي، پر ڪجهه ڪمپنيون چال سوال پڇڻ پسند ڪن ٿيون يا ڪجهه غير معمولي. دٻاءُ واري انٽرويو دوران پريشان ٿيڻ کان بچڻ لاءِ، اهو مفيد آهي ته جاوا جا مسئلا پاڻ حل ڪرڻ جي ڪوشش ڪريو، گهر ۾.
جاوا مسئلا هڪ چال سان: هيلو، انٽرويو!  - 1
هن مقالي ۾ اسين انهن منجهيل ڪمن مان اڌ درجن تي نظر وجهنداسين. اسان سفارش ڪريون ٿا ته توهان پهريان شرط پڙهو ۽ ان کي حل ڪرڻ جي ڪوشش ڪريو. ۽ هڪ ٻي شيءِ: هر روز جاوا جا مسئلا حل ڪرڻ نه وساريو!

جاوا مسئلو - 1: شروع کان لامحدود لوپ ٺاهڻ

ڪوڊ جو هڪ بلاڪ ڏنو. ان کي مڪمل ڪريو ته جيئن لوپ لامحدود ٿي وڃي.
class ToInfinity {
    public static void main(String[] args) {

//впишите code сюда

        for (int i = start; i <= start + 1; i++) {
             /* тут должен быть бесконечный цикл, менять ничего нельзя*/
        }
    }
}
"ڪجهه به پيچيدو ناهي،" توهان چئو. گهڻو ڪري، توهان پاڻ کي هن صورتحال ۾ هڪ کان وڌيڪ ڀيرا مليو آهي: جاوا جي مسئلن کي حل ڪرڻ دوران، توهان هڪ لامحدود لوپ ٺاهيو ۽ سوچيو ته ان کان ڪيئن نجات حاصل ڪجي. ان جي چوڌاري ٻي واٽ آهي. چال اها آهي ته چڪر پاڻ ۽ ان مان نڪرڻ جون حالتون تبديل نه ٿيون ڪري سگهجن. صرف ٻه اکر آهن. بهرحال، انهن مان ڪافي آهن هڪ لامحدود لوپ ٺاهڻ لاء. اهو ڏسڻ ۾ اچي ٿو ته اهو صرف ٻن ورهاڱي لاء ڪم ڪرڻ گهرجي، پر ان کي اوور فلو استعمال ڪندي لامحدود بڻائي سگهجي ٿو. ڇا توهان اڳ ۾ ئي اندازو لڳايو آهي ته ڪيئن؟

حل

اوور وهڻ سبب. Integer.MAX_VALUEوڌ ۾ وڌ قدر آهي جيڪا intجاوا ۾ محفوظ ٿي سگهي ٿي. جيڪڏھن توھان Integer.MAX_VALUEھن قدر تائين پھچي ۽ وڌايو، توھان ھيٺ لھي وڃو Integer.MIN_VALUE، يعني گھٽ ۾ گھٽ قدر ڏانھن Integer. اهڙيء طرح، هن جاوا جي مسئلي کي حل ڪرڻ لاء، اسان کي صرف startمتغير کي هڪ قدر تفويض ڪرڻ جي ضرورت آهي جيڪا ڊيٽا جي قسم جي وڌ ۾ وڌ قيمت کان 1 گهٽ آهي int. جاوا ۾ ٽاسڪ ڪوڊ:
class ToInfinity {
    public static void main(String[] args) {
        int start = Integer.MAX_VALUE - 1;
        for (int i = start; i <= start + 1; i++) {
            //бесконечный цикл
            System.out.println(i); //убеждаемся в бесконечности цикла
        }
    }
}
ڇا ٿيندو؟ اسان start=2147483645 (Integer.MAX_VALUE-1) سان شروع ڪريون ٿا، ايندڙ ورهاڱي تي قيمت 2147483645، پوءِ 2147483646، پوءِ -2147483648، -2147483647... وغيره ٿيندي.

جاوا ٽاسڪ-2. ھڪڙو تبصرو ٺاھيو جيڪو عمل ڪيو ويندو

خير، اسان هتي آهيون! پهرئين ليڪچر کان اسان ٻڌو هو ته تبصرا نه ڪيا ويندا آهن. ان ڪري اهي تبصرا آهن. اسان سمجهون ٿا ته هن مسئلي جو حل هميشه جاوا پروگرامر لاءِ واضح ناهي، جيتوڻيڪ هڪ تجربيڪار. بهرحال، جاوا مشين کي "قانوني طور" تي عمل ڪرڻ لاء تبصرو هلائڻ لاء مجبور ڪرڻ لاء هڪ مشڪل طريقو آهي. ڇا توهان محسوس ڪيو آهي ته هوا ڪٿان وهندي آهي؟ اندازو ڪرڻ جي ڪوشش ڪريو!

حل

جاوا ۾ مسئلو حل ڪرڻ لاء ڪوڊ:
public class ExecutableComment {
    public static void main(String[] args) {
        // комментарий ниже будет выполнен!
        // \u000d System.out.println("выполняемый комментарий");
    }
}
جيڪڏهن اسان IDE ۾ جاوا ۾ هن ڪم لاء ڪوڊ ٽائيپ ڪريو، اهو آهي جيڪو اسان حاصل ڪريون ٿا:
выполняемый комментарий
ان جو سبب اهو آهي ته جاوا ڪمپائلر يونيڪوڊ ڪردار کي \u000dنئين لائين جي طور تي پڙهي ٿو، ۽ اسان جو ڪوڊ هن ريت پڙهي ٿو: جاوا ۾ مسئلو حل ڪرڻ لاءِ ڪمپائلر سمجھايو ڪوڊ:
public class ExecutableComment {
    public static void main(String[] args) {
        // the line below this gives an output
        // \u000d
        System.out.println("comment executed");
    }
}

جاوا ٽاسڪ - 3: نالي وارو لوپ ٺاهيو

سيريز جو ٻيو نمائندو "عملي پروگرامنگ مسئلا، جاوا هڪ گول خلا ۾." ان لحاظ کان ته اهو واضح ناهي ته اهو ڇو ضروري آهي، اهو ممڪن ناهي ته چڪر هن حقيقت کان ناراض ٿئي ته اهو غير ذاتي آهي. چڱو، ٺيڪ، ٻيو ڪجهه اهم آهي: ٻولي توهان کي چڪر کي نالو ڏيڻ جي اجازت ڏئي ٿي.

حل

نوٽ: ڪجهه لاءِ، اهڙن ”نالن“ کي ”ٽيگ“ طور سڃاتو وڃي ٿو، جن کي عملي طور استعمال ڪرڻ جي سفارش نه ڪئي وئي آهي. جاوا ۾ مسئلو حل ڪرڻ لاءِ ڪوڊ، ھڪڙي نالي واري لوپ کي ڏيکاريندي
public class NamedLoop {
    public static void main(String[] args) {
        loop1:
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5; j++) {
                if (i == 3)
                    break loop1;
                System.out.println("i = " + i + " j = " + j);
            }
        }
    }
}
اھو اھو آھي جيڪو ٻاھر ٿيندو جيڪڏھن توھان پروگرام هلائيندا آھيو:
i = 0 j = 0
i = 0 j = 1
i = 0 j = 2
i = 0 j = 3
i = 0 j = 4
i = 1 j = 0
i = 1 j = 1
i = 1 j = 2
i = 1 j = 3
i = 1 j = 4
i = 2 j = 0
i = 2 j = 1
i = 2 j = 2
i = 2 j = 3
i = 2 j = 4
هتي توهان پڻ استعمال ڪري سگهو ٿا جاري رکڻ لاءِ هڪ نالي واري لوپ جي شروعات ڏانهن. ۽ جيڪڏهن ضروري هجي ته، توهان استعمال ڪري سگهو ٿا break(يا continue) هڪ nested if-elsewith for-loop استعمال ڪندي ڪيترن ئي لوپ کي ٽوڙڻ لاءِ if-else. هي مدد ڪندو ڪيترن ئي جھنڊن کي ترتيب ڏيڻ کان بچڻ ۽ انھن کي if-elseجانچڻ لاءِ معلوم ڪرڻ لاءِ ته ڇا جاري رکڻ يا اندرين لوپ مان نڪرڻ.

جاوا مسئلو - 4. انٽيجرز جي هڪ صف ۾ صرف نقل بابت

1 کان 100 تائين ArrayListعنصرن تي مشتمل عددن جي هڪ صف ڏني وئي آهي (يا ، جيئن توهان چاهيو ٿا). Integerان کي ڪيئن ڳولڻ لاء؟ اهڙا ڪم جاوا پروگرامر کي پوئين ٽن کان وڌيڪ واقف آهن. ڇاڪاڻ ته اهو ٻوليءَ جي نزاڪت کي ڄاڻڻ بابت نه آهي، جيڪي تقريباً ڪڏهن به استعمال نه ڪيا ويا آهن، پر منطق بابت. برٽ فورس ذريعي حل ڪرڻ لاءِ پهريون بي لگام تسلسل تمام جلدي غائب ٿي ويندو آهي جڏهن توهان جو مٿو ڦرندو آهي يا اتي هڪ رويو هوندو آهي ”مان هڪ پروگرامر آهيان، مان هوشيار آهيان“. صرف خراب شيء اها آهي ته هڪ انٽرويو دوران، دٻاء هيٺ، اهو ٿي سگهي ٿو. تنهن ڪري هاڻي سوچيو ان کان اڳ جو توهان حل کي ڏسو!

حل الورورٿم هن ريت آهي:

1 کان 100 تائين سڀني انگن جو مجموعو ڳڻيو. اسان سمجهون ٿا ته توهان کي خبر آهي ته اهو ڪيئن ڪجي (مثال طور، مشهور گاس طريقو استعمال ڪندي) هاڻي حساب ڪريو پنهنجي صف جي عناصر جي مجموعو يا ArrayList’а. ۽... پهرين رقم کي ٻئي مان گھٽايو. بنگو! نتيجو نمبر نقل ٿيل عنصر جي قيمت آهي. جاوا مسئلو حل لاء ڪوڊ ArrayList.
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class FindDuplicate {
    private static void findDuplicate(List<Integer> elements) {
//находим сумму всех уникальных элементов списка
        int distinctSum = elements.stream().distinct().mapToInt(e -> e).sum();
//находим сумму всех элементов списка
        int totalSum = elements.stream().mapToInt(e -> e).sum();
        System.out.println("Элемент, который повторяется : " + (totalSum - distinctSum));
    }

    public static void main(String[] args) {
//создаем список последовательных элементов на промежутке [1..101).
        List <Integer> elements = IntStream.range(1, 101).boxed().collect(Collectors.toList());
//устанавливаем элементу с индексом 53 meaning 23
        elements.set(53, 23);
        findDuplicate(elements);
    }
}
ٻيو حل
import java.util.List;
import java.util.ArrayList;

public class Duplicate {

    public int findDuplicateNumber(List<Integer> numbers) {

        int highestNumber = numbers.size() - 1;
        int total = getSum(numbers);
        int duplicate = total - (highestNumber * (highestNumber + 1) / 2);
        return duplicate;
    }

    public int getSum(List<Integer> numbers) {

        int sum = 0;
        for (int num : numbers) {
            sum = sum + num;
        }
        return sum;
    }

    public static void main(String a[]) {
        List <Integer> numbers = new ArrayList <Integer>();
        for (int i = 1; i < 100; i++) {
            numbers.add(i);
        }
        //добавляем дубликат в список
        numbers.add(25);
        Duplicate dn = new Duplicate();
        System.out.println("Элемент, который повторяется: " + dn.findDuplicateNumber(numbers));
    }
}

جاوا مسئلو - 5. انٽيجرز جي هڪ صف ۾ هڪ غير منفرد نقل بابت

جيڪڏھن اڳوڻو مسئلو توھان کي ڏاڍو سولو لڳي، ته پوءِ ھيٺين کي حل ڪرڻ جي ڪوشش ڪريو: 1 کان 100 تائين عددن جي ھڪڙي شيٽ ڏني وئي آھي. ان ۾ نقل (ھڪ کان وڌيڪ) آھن. عنصرن کي ڪيئن ڳولجي جيڪي هڪ کان وڌيڪ ڀيرا ٿين ٿا (پنهنجي پاڻ کي عنصر ڳوليو ۽ ظاهر ڪيو ته اهو ڪيترا ڀيرا ٿئي ٿو)؟

حل

هتي سڀ کان وڌيڪ منطقي حل آهي هڪ ڍانچي کي استعمال ڪرڻ جهڙوڪ HashMap, ڇاڪاڻ ته اهو ڊيٽا کي اهم-قدر جوڑوں ۾ محفوظ ڪري ٿو. جاوا جو مسئلو حل ڪرڻ لاءِ ڪوڊ:
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class SomeDuplicates {
    private static void findDuplicates(List<Integer> elements) {
        HashMap <Integer, Integer > duplicates = new HashMap < >();
//заполняем Map duplicates значениями по принципу:
// ключ – meaning element, meaning – сколько раз он встречается
        elements.forEach(e -> duplicates.put(e, duplicates.get(e) == null ? 1 : duplicates.get(e) + 1));
//из duplicates убираем все элементы, которые встретorсь не более 1 раза,
//и сохраняем //результат в список (для удобства обработки на следующем шаге)
        List <Map.Entry <Integer, Integer> >
        result = duplicates.entrySet().stream().filter(d -> d.getValue() > 1).collect(Collectors.toList());
//выводим результат для всех элементов в списке result
        result.forEach(e -> System.out.println(String.format("Элемент %d  встречается %d раз", e.getKey(), e.getValue())));
    }

    public static void main(String[] args) {
        List <Integer> elements = IntStream.range(1, 101).boxed().collect(Collectors.toList());
        elements.set(97, 23);
        elements.set(27, 51);
        elements.set(99, 23);
        findDuplicates(elements);
    }
}

نتيجو

عملي جاوا جا مسئلا تمام مختلف آهن، ۽ توهان کي خبر ناهي ته انٽرويو وٺندڙ توهان کي ڪهڙي قسم جي اڻڄاتل پزل ڏيڻ جو فيصلو ڪندو. بهرحال، ڪو به مناسب آجر سمجهي ٿو ته توهان جي جاوا جا مشڪل مسئلن کي حل ڪرڻ جي صلاحيت کان وڌيڪ اهم توهان جي حقيقي عملي مسئلن کي حل ڪرڻ جي صلاحيت هوندي ، جهڙوڪ اهي جيڪي توهان کي توهان جي ڪم دوران ملندا. تنهن ڪري انهن کي جيترو ٿي سگهي حل ڪريو. اهو ئي سبب آهي ته JavaRush ٺاهي وئي. هن مضمون جي تياري ۾ geeksforgeeks مان مواد استعمال ڪيو ويو.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION