JavaRush طلباء کے لیے ، پروگرامنگ چیلنجز، Java، اور validator بہترین دوست ہیں۔ تاہم، ہر ڈویلپر پڈاون کے لیے ایک وقت ایسا آتا ہے جب اسے کبھی کبھار پٹری سے اترنا شروع کرنا پڑتا ہے، اپنے لیے چھوٹے پروجیکٹس کے ساتھ آنا اور انٹرویوز کی تیاری کرنی پڑتی ہے۔ انٹرویو میں، ایسا لگتا ہے کہ آپ کو بالکل وہی عملی جاوا مسائل کا سامنا کرنا چاہئے جیسا کہ کورس میں تھا۔ زیادہ تر معاملات میں یہ سچ ہے، لیکن کچھ کمپنیاں چال سوالات یا کوئی غیر معمولی چیز پوچھنا پسند کرتی ہیں۔ دباؤ والے انٹرویو کے دوران الجھنے سے بچنے کے لیے، گھر پر جاوا کے ایسے مسائل خود حل کرنے کی کوشش کرنا مفید ہے۔
اس مضمون میں ہم ان مشکل کاموں میں سے نصف درجن کا جائزہ لیں گے۔ ہمارا مشورہ ہے کہ آپ پہلے شرط کو پڑھیں اور اسے خود حل کرنے کی کوشش کریں۔ اور ایک اور چیز: ہر روز کورس سے جاوا کے مسائل کو حل کرنا نہ بھولیں!
- ٹاسک-1: شروع سے ایک لامحدود لوپ بنانا
- ٹاسک-2۔ ایک تبصرہ بنائیں جس پر عمل کیا جائے گا۔
- ٹاسک 3: ایک نامزد لوپ بنائیں
- ٹاسک 4۔ عدد کی ایک صف میں ایک ہی ڈپلیکیٹ کے بارے میں
- ٹاسک-5۔ عدد کی ایک صف میں غیر منفرد ڈپلیکیٹ کے بارے میں
جاوا کا مسئلہ - 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-else
with for
-loop کا استعمال کرتے ہوئے کئی لوپس کو توڑنے کے لیے if-else
۔ اس سے بہت سارے جھنڈوں کو ترتیب دینے اور ان کی جانچ کرنے سے بچنے میں مدد ملے گی if-else
تاکہ یہ معلوم کیا جا سکے کہ اندرونی لوپ کو جاری رکھنا ہے یا باہر نکلنا ہے۔
جاوا کا مسئلہ - 4. عدد کی ایک صف میں صرف ڈپلیکیٹ کے بارے میں
ArrayList
1 سے 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);
}
}
GO TO FULL VERSION