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);

এই কোডটি কাজ করবে না, কারণ আপনি একই সাথে একটি সংগ্রহের উপাদানগুলি অতিক্রম করতে এবং সেই সংগ্রহটি সংশোধন করতে প্রতিটি লুপ ব্যবহার করতে পারবেন না।

বেশ কিছু সমাধান আছে। প্রথমত, আপনি একটি সংগ্রহ অতিক্রম করতে পারেন এবং অন্যটি পরিবর্তন করতে পারেন:

সমাধান 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 );


public6. একটি একক ফাইলে মডিফায়ার সহ বেশ কয়েকটি ক্লাস স্থাপন করা

একটি ফাইলে শুধুমাত্র একটি পাবলিক ক্লাস থাকতে পারে। একটি ফাইলে আরও ক্লাস ঘোষণা করা যেতে পারে, তবে সেগুলিকে অবশ্যই একটি পাবলিক ক্লাসের অভ্যন্তরীণ ক্লাস হতে হবে, বা সংশোধক থাকতে হবে না 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;
}