CodeGym विद्यार्थ्यांचे सर्वोत्तम मित्र म्हणजे प्रोग्रामिंग टास्क, Java आणि टास्क व्हॅलिडेटर. तरीही, एक वेळ अशी येते जेव्हा प्रत्येक पाडाव विकासकाने अडगळीत पडलेल्या मार्गावरून चालणे सुरू केले पाहिजे, स्वतःचे छोटे-प्रोजेक्ट शोधले पाहिजेत आणि मुलाखतीसाठी स्वतःला तयार केले पाहिजे. एखाद्याला वाटेल की मुलाखतीत या कोर्समध्ये आढळणारी व्यावहारिक जावा कार्ये असतील. आणि बहुतेक प्रकरणांमध्ये असेच आहे, परंतु काही कंपन्यांना युक्तीचे प्रश्न किंवा काहीतरी अपरिचित विचारणे आवडते. तणावपूर्ण मुलाखती दरम्यान गोंधळ होऊ नये म्हणून, जावाची अशीच कार्ये घरीच सोडवण्याचा प्रयत्न करणे उपयुक्त ठरेल.
या लेखात, आम्ही अशा 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 */
}
}
}
" हे कठीण नाही, " तुम्ही म्हणाल. तुम्ही या परिस्थितीत स्वतःला वारंवार सापडले असण्याची शक्यता आहे: जावा टास्क पूर्ण करताना, तुम्ही एक अनंत लूप तयार केला होता आणि त्यातून मुक्त कसे व्हावे याचा विचार करावा लागला. बरं, हे उलटं आहे. येथे अवघड भाग आहे: आपण स्वतः लूप किंवा त्याच्या बाहेर पडण्याची परिस्थिती बदलू शकत नाही. फक्त दोन पुनरावृत्ती आहेत. परंतु, ते अनंत लूप तयार करण्यासाठी पुरेसे आहेत. असे दिसते की ते फक्त दोन पुनरावृत्तीसाठी कार्यान्वित केले पाहिजे, परंतु तुम्ही ओव्हरफ्लो वापरून ते अनंत करू शकता. आपण आधीच अंदाज लावला आहे की कसे?
उपाय
ओव्हरफ्लोमुळे, Java मध्ये संचयित करू शकणारे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");
}
}
जर आम्ही हा जावा कोड आयडीईमध्ये टाकला, तर आम्हाला काय मिळेल:
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 पर्यंत पूर्णांकांची सूची दिली आहे. त्यात डुप्लिकेट आहेत (एकापेक्षा जास्त). एकापेक्षा जास्त वेळा येणारे घटक तुम्ही कसे शोधता (घटक शोधा आणि ते किती वेळा येतात ते दर्शवा)?उपाय
येथे तार्किक उपाय म्हणजे हॅशमॅप सारखे काहीतरी वापरणे, कारण ते की-व्हॅल्यू जोड्यांमध्ये डेटा संग्रहित करते. Java मध्ये या कार्यासाठी कोड:
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