কোডজিম ছাত্রদের সেরা বন্ধু হল প্রোগ্রামিং টাস্ক, জাভা এবং টাস্ক ভ্যালিডেটর। তবুও, এমন একটি সময় আসে যখন প্রতিটি প্যাডাওয়ান বিকাশকারীকে অবশ্যই মারমুখী পথ ছেড়ে হাঁটতে শুরু করতে হবে, তার নিজস্ব মিনি-প্রকল্প উদ্ভাবন করতে হবে এবং সাক্ষাত্কারের জন্য নিজেকে প্রস্তুত করতে হবে। কেউ মনে করবে যে ইন্টারভিউতে ঠিক একই রকম ব্যবহারিক জাভা টাস্ক থাকবে যা এই কোর্সে পাওয়া যায়। এবং তাই এটি বেশিরভাগ ক্ষেত্রেই হয়, তবে কিছু কোম্পানি কৌশল প্রশ্ন বা অপরিচিত কিছু জিজ্ঞাসা করতে পছন্দ করে। একটি চাপযুক্ত সাক্ষাত্কারের সময় বিড়ম্বনা এড়াতে, বাড়িতে আপনার নিজের মতো জাভা কাজগুলি সমাধান করার চেষ্টা করা সহায়ক।
এই নিবন্ধে, আমরা এমন 5টি জটিল কাজ অন্বেষণ করব। আমরা সুপারিশ করি যে আপনি প্রথমে শর্তগুলি পড়ুন এবং সেগুলি নিজে সমাধান করার চেষ্টা করুন। এবং আরও একটি জিনিস: প্রতিদিন এই কোর্সে জাভা কাজগুলি করতে ভুলবেন না!

- টাস্ক 1: স্ক্র্যাচ থেকে একটি অসীম লুপ তৈরি করুন
- টাস্ক 2: একটি এক্সিকিউটেবল মন্তব্য তৈরি করুন
- টাস্ক 3: একটি নামযুক্ত লুপ তৈরি করুন
- টাস্ক 4: পূর্ণসংখ্যার অ্যারেতে একটি একক সদৃশ খুঁজুন
- টাস্ক 5: পূর্ণসংখ্যার অ্যারেতে একটি অ-অনন্য সদৃশ খুঁজুন
টাস্ক 1: স্ক্র্যাচ থেকে একটি অসীম লুপ তৈরি করুন
কোড একটি ব্লক প্রদান করা হয়েছে. লুপ অসীম করতে এটি যোগ করুন.
class ToInfinity {
public static void main(String[] args) {
// Insert code here
for (int i = start; i <= start + 1; i++) {
/* This should be an infinite loop, but don't change anything here */
}
}
}
" এটা কঠিন নয়, " আপনি বলুন। আপনি সম্ভবত এই পরিস্থিতিতে নিজেকে বারবার খুঁজে পেয়েছেন: একটি জাভা টাস্ক সম্পূর্ণ করার সময়, আপনি একটি অসীম লুপ তৈরি করেছেন এবং কীভাবে এটি থেকে মুক্তি পাবেন তা নিয়ে ভাবতে হয়েছিল। ওয়েল, এই কাছাকাছি উপায়. এখানে জটিল অংশ: আপনি লুপ নিজেই বা এর প্রস্থান শর্ত পরিবর্তন করতে পারবেন না। শুধুমাত্র দুটি পুনরাবৃত্তি আছে. কিন্তু, তারা একটি অসীম লুপ তৈরি করতে যথেষ্ট। দেখে মনে হচ্ছে এটি শুধুমাত্র দুটি পুনরাবৃত্তির জন্য কার্যকর করা উচিত, তবে আপনি ওভারফ্লো ব্যবহার করে এটি অসীম করতে পারেন। আপনি কি ইতিমধ্যে অনুমান করেছেন কিভাবে?
সমাধান
ওভারফ্লো হওয়ার কারণে,Integer.MAX_VALUE
সর্বাধিক মান যা একটি int
জাভাতে সংরক্ষণ করতে পারে। আপনি যদি এই মানটিতে পৌঁছান এবং বৃদ্ধি করেন, আপনি সর্বনিম্ন সম্ভাব্য মানের Integer.MAX_VALUE
দিকে ফিরে যান । সুতরাং, এই জাভা টাস্কটি সম্পূর্ণ করার জন্য, আমাদের কেবলমাত্র ভেরিয়েবলের সর্বোচ্চ মানের থেকে 1 কম বরাদ্দ করতে হবে। এই কাজের জন্য জাভা কোড: Integer.MIN_VALUE
Integer
int
start
class ToInfinity {
public static void main(String[] args) {
int start = Integer.MAX_VALUE - 1;
for (int i = start; i <= start + 1; i++) {
// Infinite loop
System.out.println(i); // Be sure we are in an infinite loop
}
}
}
কি ঘটেছে? আমরা start=2147483645 (Integer.MAX_VALUE-1) দিয়ে শুরু করি। পরবর্তী পুনরাবৃত্তিতে, মানটি হয়ে যায় 2147483645, তারপর 2147483646, তারপর -2147483648, -2147483647... এবং আরও অনেক কিছু।
টাস্ক 2: একটি এক্সিকিউটেবল মন্তব্য তৈরি করুন
ওয়েল, আমরা এখানে! প্রথম পাঠ থেকে, আমরা শুনেছি যে মন্তব্যগুলি কার্যকর করা হয় না৷ সেজন্য তাদের মন্তব্য বলা হয়। আমরা মনে করি যে এই কাজের সমাধান সবসময় জাভা প্রোগ্রামারদের কাছে, এমনকি অভিজ্ঞদের কাছেও স্পষ্ট হবে না। যাইহোক, JVM একটি মন্তব্য চালানোর জন্য একটি কৌশলী (কিন্তু "আইনি") উপায় আছে। আপনি বুঝতে পারেন আমরা কোথায় যাচ্ছি? অনুমান করার চেষ্টা কর!সমাধান
এই কাজের জন্য জাভা কোড:
public class ExecutableComment {
public static void main(String[] args) {
// The comment below will be executed!
// \u000d System.out.println("executable comment");
}
}
যদি আমরা এই জাভা কোডটি একটি IDE-তে প্রবেশ করি, তাহলে আমরা যা পাব তা এখানে:
executable comment
এর কারণ হল জাভা কম্পাইলার ইউনিকোড অক্ষরটিকে \u000d
একটি নতুন লাইন হিসাবে ব্যাখ্যা করে এবং আমাদের কোডটি এইভাবে পড়ে: এই কাজের জন্য জাভা কোড, যেমনটি কম্পাইলার দ্বারা ব্যাখ্যা করা হয়েছে:
public class ExecutableComment {
public static void main(String[] args) {
// The comment below will be executed!
// \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
if-else
for
if-else
if-else
টাস্ক 4: পূর্ণসংখ্যার অ্যারেতে একটি একক সদৃশ খুঁজুন
আপনাকে একটি পূর্ণসংখ্যা অ্যারে দেওয়া হয়েছে (অথবা একটিArrayList
, যদি আপনি পছন্দ করেন) যাতে Integer
1 থেকে 100 পর্যন্ত প্রতিটি থাকে। অ্যারেটিতে একটি, এবং শুধুমাত্র একটি, ডুপ্লিকেট উপাদান রয়েছে। তুমি এটা কিভাবে পেলে? একজন জাভা প্রোগ্রামারের জন্য আগের তিনটির তুলনায় এই ধরনের কাজ পাওয়া বেশি সাধারণ। কারণ এটি ভাষার খুব কমই ব্যবহৃত সূক্ষ্মতা সম্পর্কে আপনার জ্ঞানের চেয়ে যুক্তির বিষয়ে। নৃশংস শক্তি ব্যবহার করার জন্য আপনার প্রথম লাগামহীন আবেগটি খুব দ্রুত পাস হবে যখন আপনার মস্তিষ্ক কিক করবে বা আপনি বুঝতে পারবেন "আমি একজন প্রোগ্রামার। আমি স্মার্ট।" একমাত্র সমস্যা হল একটি সাক্ষাত্কারের সময়, যখন আপনি চাপের মধ্যে থাকেন, তখন এটি ঘটতে পারে না। তাই সমাধান দেখার আগে এখনই ভাবুন!
এখানে অ্যালগরিদম
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();
// Find the sum of all list elements
int totalSum = elements.stream().mapToInt(e -> e).sum();
System.out.println("The repeated element is: " + (totalSum - distinctSum));
}
public static void main(String[] args) {
// Create a list of sequential elements in the interval [1..101).
List <Integer> elements = IntStream.range(1, 101).boxed().collect(Collectors.toList());
// Add the value 23 at index 53
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);
}
// Add a duplicate to the list
numbers.add(25);
Duplicate dn = new Duplicate();
System.out.println("The repeated element is: " + dn.findDuplicateNumber(numbers));
}
}
টাস্ক 5: পূর্ণসংখ্যার অ্যারেতে একটি অ-অনন্য সদৃশ খুঁজুন
যদি পূর্ববর্তী কাজটি আপনার জন্য খুব সহজ ছিল, তাহলে এটি করার চেষ্টা করুন: আপনাকে 1 থেকে 100 পর্যন্ত পূর্ণসংখ্যার একটি তালিকা দেওয়া হয়েছে। এতে ডুপ্লিকেট রয়েছে (একটির বেশি)। আপনি কীভাবে একাধিকবার ঘটতে থাকা উপাদানগুলি খুঁজে পাবেন (উপাদানগুলি খুঁজুন এবং কতবার ঘটে তা নির্দেশ করুন)?সমাধান
এখানে যৌক্তিক সমাধানটি একটি হ্যাশম্যাপের মতো কিছু ব্যবহার করা হবে, কারণ এটি কী-মান জোড়ায় ডেটা সংরক্ষণ করে। জাভাতে এই কাজের জন্য কোড:
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 <>();
// Use the following rule to populate the Map duplicates:
// the key is the element value, and the value is the number of times it occurs
elements.forEach(e -> duplicates.put(e, duplicates.get(e) == null ? 1 : duplicates.get(e) + 1));
// Remove any elements that don't occur more than once from the Map duplicates
// and store the result as a list (to make it easy to work with in the next step)
List <Map.Entry <Integer, Integer> >
result = duplicates.entrySet().stream().filter(d -> d.getValue() > 1).collect(Collectors.toList());
// Write the results for all elements to the result list
result.forEach(e -> System.out.println(String.format("Element %d occurs %d times", 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