प्रोग्रामिंग टास्क, जावा और टास्क वैलिडेटर CodeGym के छात्रों के सबसे अच्छे दोस्त हैं। फिर भी, ऐसा समय आता है जब प्रत्येक पादवन डेवलपर को पीटा पथ से चलना शुरू करना चाहिए, अपनी मिनी परियोजनाओं का आविष्कार करना चाहिए और साक्षात्कार के लिए खुद को तैयार करना चाहिए। कोई यह सोचेगा कि साक्षात्कार में ठीक वही व्यावहारिक जावा कार्य होंगे जो इस पाठ्यक्रम में पाए जाते हैं। और इसलिए यह ज्यादातर मामलों में है, लेकिन कुछ कंपनियां ट्रिक प्रश्न या कुछ अपरिचित पूछना पसंद करती हैं। एक तनावपूर्ण साक्षात्कार के दौरान परेशान होने से बचने के लिए, घर पर समान जावा कार्यों को स्वयं हल करने का प्रयास करना सहायक होता है।
इस लेख में, हम ऐसे ही 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
इस मान तक पहुँचते हैं और बढ़ाते हैं, तो आप कम से कम संभव मान Integer.MIN_VALUE
पर, या बल्कि, वापस रोल करते हैं। इस प्रकार, इस जावा कार्य को पूरा करने के लिए, हमें केवल चर के Integer
अधिकतम int
मान से 1 कम असाइन करने की आवश्यकता है। 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 (पूर्णांक.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");
}
}
यदि हम इस जावा कोड को आईडीई में दर्ज करते हैं, तो हमें यह मिलेगा:
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: पूर्णांकों की एक सरणी में एक एकल डुप्लिकेट खोजें
आपको एक पूर्णांक सरणी दी जाती है (या aArrayList
, यदि आप चाहें तो) जिसमें प्रत्येक 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