CodeGym /Java Course /All lectures for HI purposes /नौसिखिए प्रोग्रामरों द्वारा की जाने वाली लोकप्रिय गलतियाँ...

नौसिखिए प्रोग्रामरों द्वारा की जाने वाली लोकप्रिय गलतियाँ

All lectures for HI purposes
स्तर 1 , सबक 553
उपलब्ध

1. वस्तुओं की तुलना करना==

नौसिखिया प्रोग्रामर की पसंदीदा गलती ==ऑपरेटर का उपयोग कर वस्तुओं (विशेष रूप से तार) की तुलना कर रही है। उदाहरण के लिए:

Scanner console = new Scanner(System.in);
String s1 = console.nextLine();
String s2 = console.nextLine();
if (s1 == s2)
{
   System.out.println("The strings are equal");
}

यह कोड "स्ट्रिंग्स बराबर हैं" कभी प्रदर्शित नहीं करेगा, क्योंकि ifकथन दो अलग-अलग स्ट्रिंग ऑब्जेक्ट्स के संदर्भों की तुलना करता है।

यहाँ कोड का सही संस्करण है:

Scanner console = new Scanner(System.in);
String s1 = console.nextLine();
String s2 = console.nextLine();
if (s1.equals(s2))
{
   System.out.println("The strings are equal");
}


2. किसी Stringवस्तु को बदलना

नौसिखिए प्रोग्रामर अक्सर यह भूल जाते हैं कि कक्षा की सभी वस्तुएँ अपरिवर्तनीय हैं , और यह कि Stringकक्षा की प्रत्येक विधि एक नई वस्तु लौटाती है - वर्तमान वस्तु कभी नहीं बदलती।

उदाहरण:

String s = "Hello";
s.toUpperCase (); // Convert to uppercase

यह कोड सही कोड के समान है, लेकिन यह उम्मीद के मुताबिक काम नहीं करेगा। विधि toUpperCase()उस वस्तु को नहीं बदलती जिस पर इसे कहा जाता है। सही कोड इस तरह दिखेगा:

String s = "Hello";
String result = s.toUpperCase(); // Convert to uppercase


3. उन वस्तुओं को इनिशियलाइज़ करना भूल जाना जो एक सरणी के तत्व हैं

एक और आम गलती है कि किसी ऐरे वेरिएबल को इनिशियलाइज़ करना भूल जाना। उदाहरण:

int[] array;
array[0] = 1;
array[0] = 2;

यह कोड काम नहीं करेगा: आपको सरणी चर को कंटेनर ऑब्जेक्ट के संदर्भ के बराबर स्पष्ट रूप से सेट करने की आवश्यकता है जो सरणी के तत्वों को संग्रहीत करेगा।

int[] array = new int[10];
array[0] = 1;
array[0] = 2;


4. उदाहरण चर के बजाय स्थानीय चर का उपयोग करना।

Newbies वेरिएबल्स के लिए लंबे और अर्थपूर्ण नामों के साथ आना पसंद नहीं करते हैं। वे अक्सर एक-अक्षर वाले नामों का उपयोग करते हैं: a, b, i, आदि। जब कोड में इस तरह के कई चर होते हैं तो यह एक क्रूर काम होता है:

संख्या 99 को एक सरणी के 100 कक्षों में रखें
class Solution
{
  public static int a = 99;
  public static int i = 100;

  public static void main(String[] args)
  {
    int[] a = new int[i];
    for (int i = 0; i < 10; i++)
    {
      a[i] = a;
    }
  }
}

उपरोक्त कोड संकलित नहीं होगा। सही संस्करण इस तरह दिखता है:

संख्या 99 को एक सरणी के 100 कक्षों में रखें
class Solution
{
   public static int value = 99;
   public static int count = 100;

   public static void main(String[] args)
   {
      int[] a = new int[count];
      for (int i = 0; i < count; i++)
      {
         a[i] = value;
      }
   }
}


5. एक संग्रह आइटम को हटाना

बहुत बार ऐसे हालात होते हैं जब किसी संग्रह से एक निश्चित तत्व को निकालने की आवश्यकता होती है। कोड लगभग इस तरह दिखता है:

ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 0, -5, -7, -12, 5, 15);

for (Integer value: list)
   if (value < 0)
      list.remove(value);

यह कोड काम नहीं करेगा, क्योंकि आप संग्रह के तत्वों को एक साथ पार करने और उस संग्रह को संशोधित करने के लिए प्रत्येक लूप का उपयोग नहीं कर सकते हैं।

कई उपाय हैं। सबसे पहले, आप एक संग्रह को पार कर सकते हैं और दूसरे को बदल सकते हैं:

समाधान 1
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 0, -5, -7, -12, 5, 15);

ArrayList<Integer> copy = new ArrayList<Integer>(list);
for (Integer value: copy)
   if (value < 0)
      list.remove(value);

दूसरा, जावा 8 के बाद से, संग्रह में एक removeIf()विधि है, जिसके लिए आप एक नियम (लैम्ब्डा फ़ंक्शन) पास कर सकते हैं जो इंगित करता है कि किन तत्वों को निकालना है।

उदाहरण:

समाधान 2
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 0, -5, -7, -12, 5, 15);

list.removeIf( x-> x<0 );


6. संशोधक के साथ कई वर्गों को publicएक फ़ाइल में रखना

एक फ़ाइल में केवल एक सार्वजनिक वर्ग हो सकता है। एक फ़ाइल में अधिक कक्षाएं घोषित की जा सकती हैं, लेकिन उन्हें या तो सार्वजनिक वर्ग की आंतरिक कक्षाएं होनी चाहिए, या publicसंशोधक नहीं होना चाहिए। उदाहरण:

Solution.java फ़ाइल की सामग्री टिप्पणी
public class Solution
{
}
public class Main
{
}
इसकी अनुमति नहीं है: एक फ़ाइल में दो सार्वजनिक वर्ग।
public class Solution
{
}
class Main
{
}
लेकिन आप ऐसा कर सकते हैं। मुख्य वर्ग सार्वजनिक नहीं है
public class Solution
{
  public static class Main
  {
  }
}
और आप यह कर सकते हैं। मुख्य वर्ग एक नेस्टेड वर्ग है


7. स्थैतिक main()विधि से किसी वर्ग के साधारण (गैर-स्थैतिक) तरीकों को कॉल करना

main()कभी-कभी नौसिखिए प्रोग्रामर विधि या अन्य स्थिर तरीकों से गैर-स्थैतिक चर और विधियों तक पहुँचने का प्रयास करते हैं। ऐसा कोड निश्चित रूप से काम नहीं करेगा।

public class Solution
{
   public int n = 100;
   public int[] createArray()
   {
      return new int[n];
   }

   public static void main(String[]args)
   {
      int[] array = createArray();
   }
}

मुख्य विधि केवल स्थैतिक विधियों/चरों को संदर्भित कर सकती है। ठीक है, या इसे पहले कक्षा का एक उदाहरण बनाना होगा Solution, और उसके बाद ही उस वस्तु के गैर-स्थैतिक तरीकों को कॉल करना होगा। उदाहरण:

समाधान 1 समाधान 2
public class Solution
{
  public static int n = 100;

  public static int[] createArray()
  {
    return new int[n];
  }

  public static void main(String[]args)
  {
    int[] array = createArray();
  }
}
public class Solution
{
  public int n = 100;

  public int[] createArray()
  {
    return new int[n];
  }

  public static void main(String[]args)
  {
    Solution sol = new Solution();
    int[] array = sol.createArray();
  }
}


8. कंस्ट्रक्टर को एक विधि की तरह घोषित करना

एक और आम गलती गलत तरीके से क्लास कंस्ट्रक्टर घोषित करना है। कंस्ट्रक्टर का नाम क्लास के नाम के समान होना चाहिए, और कंस्ट्रक्टर का कोई परिणाम प्रकार नहीं होता है। सबसे आम गलतियाँ इस तरह दिखती हैं:

public class Person
{
   private String value;

   void Person(String value)
   {
      this.value = value;
   }
}




यहां रिटर्न टाइप नहीं होना चाहिए
public class Person
{
   private String value;

   constructor(String value)
   {
      this.value = value;
   }
}




अमान्य निर्माता नाम। कंस्ट्रक्टर का नाम क्लास के नाम से मेल खाना चाहिए
public class Person
{
   private String value;

   Person(String value)
   {
      value = value;
   }
}






this लापता है। वेरिएबल valueखुद को असाइन किया जाएगा
public class Person
{
   private String value;

   Person(String value)
   {
      this.value = value;
   }
}




वह सब सही है


9. इंटरफेस की गलत विरासत

जावा के रचनाकारों ने इसे अंग्रेजी के बहुत करीब बनाने की कोशिश की, इसलिए उन्होंने कुछ संबंधित अवधारणाओं के लिए अलग-अलग कीवर्ड चुने।

जब एक वर्ग एक वर्ग को इनहेरिट करता है, तो आपको extendsकीवर्ड का उपयोग करना होगा:

class Pet
{
}

class Cat extends Pet
{
}

जब कोई वर्ग इंटरफ़ेस प्राप्त करता है, तो आपको implementsकीवर्ड का उपयोग करने की आवश्यकता होती है:

interface Meow
{
}

class Cat implements Meow
{
}

जब कोई इंटरफ़ेस किसी इंटरफ़ेस को इनहेरिट करता है, तो extendsकीवर्ड का उपयोग करें:

interface Meow
{
}

interface Voice extends Meow
{
}


10. कथन breakमें चूक करनाswitch

और आज हमारे लिए आखिरी गलती है, लेकिन शुरुआती लोगों के लिए आखिरी नहीं, एक बयान breakमें एक बयान शामिल करने में नाकाम रही है। switchउदाहरण

गलत सही
LocalDate date = LocalDate.now();
DayOfWeek day = date.getDayOfWeek();
switch (day)
{
   case MONDAY:
      System.out.println("Monday");
   case TUESDAY:
      System.out.println("Tuesday");
   case WEDNESDAY:
      System.out.println("Wednesday");
   case THURSDAY:
      System.out.println("Thursday");
   case FRIDAY:
      System.out.println("Friday");
   case SATURDAY:
      System.out.println("Saturday");
   case SUNDAY:
      System.out.println("Sunday");
}
LocalDate date = LocalDate.now();
DayOfWeek day = date.getDayOfWeek();
switch (day)
{
   case MONDAY:
      System.out.println("Monday");
      break;
   case TUESDAY:
      System.out.println("Tuesday");
      break;
   case WEDNESDAY:
      System.out.println("Wednesday");
      break;
   case THURSDAY:
      System.out.println("Thursday");
      break;
   case FRIDAY:
      System.out.println("Friday");
      break;
   case SATURDAY:
      System.out.println("Saturday");
      break;
   case SUNDAY:
      System.out.println("Sunday");
      break;
}

टिप्पणियां
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION