"Hai, Amigo! Ayo kita terus ngomong babagan kesalahan. Wektu iki, kita bakal njelajah kesalahan sing ora bakal ditindakake dening penyusun.

"Aku siyap ngrungokake, Diego. Muga-muga iki ora dadi isin banget kanggo aku."

Mbandhingake obyek karo==

"Dhaptar kesalahan programmer pemula favorit kita diwiwiti kanthi mbandhingake obyek (utamane strings) nggunakake ==operator"

Tuladha:

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

"Aku wis rampung sing cukup asring. Saiki aku bisa ndeleng kanthi jelas yen kode iki ora bakal nampilake "Senar sing padha", amarga statement kasebut ifmbandhingake referensi kanggo rong obyek senar sing beda.

"Ya. Mulane pilihan sing bener yaiku:

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

Ngganti Stringobyek

"Programer anyar asring lali yen kabeh obyek kelas ora bisa diganti , lan saben metode kelas Stringngasilake obyek anyar - obyek saiki ora bakal diganti."

"Durung suwe aku ngerti apa tegese ora bisa diganti , nanging aku wis nindakake iki.

"Aku cukup yakin babagan iki. Tuladha:

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

"Kode iki meh padha karo kode sing bener, nanging ora bisa kaya sing dikarepake. toUpperCase()Cara kasebut ora ngganti obyek sing diarani. Kode sing bener bakal katon kaya iki:

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

"Pancen. Aku wis nglakoni, nanging aku ora ngerti apa sing salah. Matur nuwun kanggo klarifikasi!"

Lali kanggo initialize obyek sing unsur array

"Kesalahan umum liyane yaiku lali nginisialisasi variabel array. Conto:

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

"Kode iki ora bisa digunakake: sampeyan kudu kanthi tegas nyetel variabel array sing padha karo referensi kanggo obyek wadhah sing bakal nyimpen unsur array. Versi sing bener:

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

Nggunakake variabel lokal tinimbang variabel conto.

"Newbies ora seneng nggawe jeneng sing dawa lan migunani kanggo variabel."

"Iku pancen bener. Kanggo nindakake kanthi cepet, aku kadang menehi jeneng variabel kaya a, b, lan i."

"Aja nindakake iku. Iku bab kejem kanggo nindakake nalika kode wis sawetara variabel kaya:

Sijine nomer 99 menyang 100 sel saka array
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;
    }
  }
}

"Luwih angel nggawe kesalahan ing kode kanthi jeneng sing tepat. Versi sing bener katon kaya iki:

Sijine nomer 99 menyang 100 sel saka array
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 < 10; i++)
      {
         a[i] = value;
      }
   }
}

Mbusak item koleksi

"Apa sampeyan wis ndeleng koleksi?"

"Secara harfiah kanthi mripat siji."

"Yen sampeyan ora ngerti apa sing dakkandhakake, banjur gawe cathetan dhewe kanggo ndeleng ing mangsa ngarep. Kerep banget ana kahanan nalika unsur tartamtu kudu dibusak saka koleksi. Kode katon kaya iki:

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

"Kode iki ora bisa digunakake, amarga sampeyan ora bisa nggunakake for-eachloop kanggo bebarengan ngliwati unsur koleksi lan ngowahi koleksi kasebut.

"Ana sawetara solusi. Pisanan, sampeyan bisa ngliwati siji koleksi lan ngganti liyane:

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

"Kapindho, wiwit Java 8, koleksi duwe removeIf()metode, sing sampeyan bisa ngliwati aturan (fungsi lambda) sing nuduhake unsur sing bakal dibusak. Conto:

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

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

Nyelehake sawetara kelas kanthi publicmodifier menyang file siji

"Ana mung siji kelas umum ing file. Luwih akeh kelas bisa diumumake ing file, nanging kudu dadi kelas njero kelas umum, utawa ora duwe modifier. publicConto:

Isi file Solution.java Cathetan
public class Solution
{
}
public class Main
{
}
Iki ora diidini: rong kelas umum ing file siji.
public class Solution
{
}
class Main
{
}
Nanging sampeyan bisa nindakake iki. Kelas utama ora umum
public class Solution
{
  public static class Main
  {
  }
}
Lan sampeyan bisa nindakake iki. Kelas utama yaiku kelas nested

Nelpon metode biasa (non-statis) saka kelas saka main()metode statis

"Kadhangkala programer pemula nyoba ngakses variabel lan metode non-statis saka main()metode utawa metode statis liyane. Kode kasebut ora bakal bisa digunakake, mesthi.

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

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

" mainCara kasebut mung bisa ngarujuk marang metode / variabel statis. Ya, utawa kudu nggawe conto Solutionkelas kasebut, banjur nelpon metode non-statis saka obyek kasebut. Conto:

Solusi 1 Solusi 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();
  }
}

Nyatakake konstruktor kaya metode

"Kesalahan umum liyane yaiku salah nyatakake konstruktor kelas. Jeneng konstruktor kudu padha karo jeneng kelas, lan konstruktor ora duwe jinis asil. Kesalahan sing paling umum katon kaya iki:

public class Person
{
   private String value;

   void Person(String value)
   {
      this.value = value;
   }
}
Mesthine ora ana jinis bali ing kene
public class Person
{
   private String value;

   constructor(String value)
   {
      this.value = value;
   }
}
Jeneng konstruktor ora sah. Iku kudu cocog karo jeneng kelas
public class Person
{
   private String value;

   Person(String value)
   {
      value = value;
   }
}
this wis ilang. Variabel valuebakal ditugasake dhewe
public class Person
{
   private String value;

   Person(String value)
   {
      this.value = value;
   }
}
Iku kabeh bener.

Warisan antarmuka sing salah

"Pangripta Jawa nyoba nyedhak banget karo basa Inggris, mula dheweke milih tembung kunci sing beda kanggo konsep tartamtu sing ana gandhengane.

Nalika kelas marisi kelas, sampeyan kudu nggunakake extendstembung kunci:

class Pet
{
}

class Cat extends Pet
{
}

"Nalika kelas marisi antarmuka, utawa, luwih tepat, ngleksanakake, sampeyan kudu nggunakake implementstembung kunci:

interface Meow
{
}

class Cat implements Meow
{
}

"Nalika antarmuka marisi antarmuka, gunakake extendstembung kunci:

interface Meow
{
}

interface Voice extends Meov
{
}

Ngilangi breaking switchstatement

"Lan kesalahan pungkasan kanggo dina iki, nanging dudu sing pungkasan kanggo pamula, yaiku gagal nyakup statement breaking switchstatement. Conto:

salah bener
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;
}

"Sampeyan ngerti, Diego.

"Ha! Aja mangu-mangu. Aku wis maca, nglacak, lan terus nglakoni. Dadi sing waspada!"

"???"

"Aja kuwatir. Aku mung guyon. Sing waspada lan kurangi kesalahan sing bodho."