JavaRush /جاوا بلاگ /Random-UR /ایک چال کے ساتھ جاوا کے مسائل: ہیلو، انٹرویوز!

ایک چال کے ساتھ جاوا کے مسائل: ہیلو، انٹرویوز!

گروپ میں شائع ہوا۔
JavaRush طلباء کے لیے ، پروگرامنگ چیلنجز، Java، اور validator بہترین دوست ہیں۔ تاہم، ہر ڈویلپر پڈاون کے لیے ایک وقت ایسا آتا ہے جب اسے کبھی کبھار پٹری سے اترنا شروع کرنا پڑتا ہے، اپنے لیے چھوٹے پروجیکٹس کے ساتھ آنا اور انٹرویوز کی تیاری کرنی پڑتی ہے۔ انٹرویو میں، ایسا لگتا ہے کہ آپ کو بالکل وہی عملی جاوا مسائل کا سامنا کرنا چاہئے جیسا کہ کورس میں تھا۔ زیادہ تر معاملات میں یہ سچ ہے، لیکن کچھ کمپنیاں چال سوالات یا کوئی غیر معمولی چیز پوچھنا پسند کرتی ہیں۔ دباؤ والے انٹرویو کے دوران الجھنے سے بچنے کے لیے، گھر پر جاوا کے ایسے مسائل خود حل کرنے کی کوشش کرنا مفید ہے۔
ایک چال کے ساتھ جاوا کے مسائل: ہیلو، انٹرویوز!  - 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
یہاں آپ نام لوپ کے شروع میں جانے کے لیے continue کا استعمال بھی کر سکتے ہیں۔ اور اگر ضروری ہو تو، آپ استعمال کر سکتے ہیں break(یا continue) ایک nested if-elsewith for-loop کا استعمال کرتے ہوئے کئی لوپس کو توڑنے کے لیے if-else۔ اس سے بہت سارے جھنڈوں کو ترتیب دینے اور ان کی جانچ کرنے سے بچنے میں مدد ملے گی if-elseتاکہ یہ معلوم کیا جا سکے کہ اندرونی لوپ کو جاری رکھنا ہے یا باہر نکلنا ہے۔

جاوا کا مسئلہ - 4. عدد کی ایک صف میں صرف ڈپلیکیٹ کے بارے میں

ArrayList1 سے 100 تک کے عناصر پر مشتمل انٹیجرز کی ایک صف دی گئی ہے (یا ، جیسا کہ آپ ترجیح دیتے ہیں) Integer۔ اس صف میں ایک اور صرف ایک ڈپلیکیٹ عنصر ہے۔ اسے کیسے تلاش کیا جائے؟ اس طرح کے کام جاوا پروگرامر کے لیے پچھلے تینوں سے زیادہ واقف ہیں۔ کیونکہ یہ زبان کی باریکیوں کو جاننے کے بارے میں نہیں ہے، جو تقریباً کبھی استعمال نہیں ہوتے، بلکہ منطق کے بارے میں ہے۔ جب آپ کا سر آن ہوتا ہے یا "میں ایک پروگرامر ہوں، میں ہوشیار ہوں" کا رویہ ظاہر ہونے پر وحشیانہ طاقت کے ذریعے حل کرنے کا پہلا بے لگام جذبہ بہت تیزی سے غائب ہو جاتا ہے۔ صرف ایک بری بات یہ ہے کہ انٹرویو کے دوران، دباؤ میں، ایسا نہیں ہوسکتا ہے۔ تو حل تلاش کرنے سے پہلے اب سوچیں!

حل الگورتھم مندرجہ ذیل ہے:

1 سے 100 تک کے تمام نمبروں کے مجموعے کا حساب لگائیں۔ ہمارا خیال ہے کہ آپ جانتے ہیں کہ یہ کیسے کرنا ہے (مثال کے طور پر، Gauss کا مشہور طریقہ استعمال کرتے ہوئے)۔ اب اپنی صف کے عناصر کے مجموعے کا حساب لگائیں یا 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