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. उदाहरण व्हेरिएबल ऐवजी स्थानिक व्हेरिएबल वापरणे.

नवशिक्यांना व्हेरिएबल्ससाठी लांब आणि अर्थपूर्ण नावे यायला आवडत नाहीत. ते वारंवार एकल-अक्षरी नावे वापरतात: a, b, i, इ. कोडमध्ये असे अनेक व्हेरिएबल्स असतात तेव्हा ते करणे अत्यंत क्रूर गोष्ट आहे:

अॅरेच्या 100 सेलमध्ये 99 क्रमांक ठेवा
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;
    }
  }
}

वरील कोड संकलित होणार नाही. योग्य आवृत्ती असे दिसते:

अॅरेच्या 100 सेलमध्ये 99 क्रमांक ठेवा
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);

हा कोड कार्य करणार नाही, कारण तुम्ही संग्रहातील घटकांचा एकाच वेळी मार्गक्रमण करण्यासाठी आणि त्या संग्रहात सुधारणा करण्यासाठी प्रत्येकासाठी लूप वापरू शकत नाही.

अनेक उपाय आहेत. प्रथम, तुम्ही एका संग्रहातून पुढे जाऊ शकता आणि दुसरा बदलू शकता:

उपाय १
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);

दुसरे, Java 8 पासून, संग्रहांमध्ये एक removeIf()पद्धत आहे, ज्यामध्ये तुम्ही एक नियम (लॅम्बडा फंक्शन) पास करू शकता जे कोणते घटक काढायचे हे सूचित करतात.

उदाहरण:

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

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


public6. एकाच फाईलमध्ये मॉडिफायरसह अनेक वर्ग ठेवणे

फाईलमध्ये फक्त एक सार्वजनिक वर्ग असू शकतो. फाईलमध्ये अधिक वर्ग घोषित केले जाऊ शकतात, परंतु ते एकतर सार्वजनिक वर्गाचे अंतर्गत वर्ग असले पाहिजेत किंवा सुधारक नसावेत public. उदाहरण:

Solution.java फाइलची सामग्री नोंद
public class Solution
{
}
public class Main
{
}
याची परवानगी नाही: एकाच फाईलमध्ये दोन सार्वजनिक वर्ग.
public class Solution
{
}
class Main
{
}
पण तुम्ही हे करू शकता. मुख्य वर्ग सार्वजनिक नाही
public class Solution
{
  public static class Main
  {
  }
}
आणि तुम्ही हे करू शकता. मुख्य वर्ग हा नेस्टेड वर्ग आहे


main()7. स्टॅटिक पद्धतीवरून वर्गाच्या सामान्य (नॉन-स्टॅटिक) पद्धती कॉल करणे

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आणि त्यानंतरच त्या ऑब्जेक्टच्या नॉन-स्टॅटिक पद्धती कॉल करा. उदाहरण:

उपाय १ उपाय 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. इंटरफेसचा चुकीचा वारसा

Java च्या निर्मात्यांनी ते इंग्रजीच्या अगदी जवळ आणण्याचा प्रयत्न केला, म्हणून त्यांनी काही संबंधित संकल्पनांसाठी भिन्न कीवर्ड निवडले.

जेव्हा एखादा वर्ग वर्गाचा वारसा घेतो, तेव्हा तुम्हाला कीवर्ड वापरावे लागेल 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;
}