So sánh sách solutions phiên bản 1 và 2

Trong mỗi unit sẽ có phần từ vựng kèm theo hình ảnh để các em dễ hình dung và cách phiên âm chuẩn quốc tế, có phần trò chơi để các em củng cố từ vựng vừa học. Ngoài ra còn có những mẫu chuyện ngắn hay để các em biết cách đặt câu dựa trên những từ vừa học. Thêm vào đó, cuốn sách còn có những tình huống giao tiếp thông dụng thông qua tranh vẽ, các em có thể dễ dàng sử dụng vào những tình huống tương tự trong thực tế cuộc sống.

"Xin chào, Amigo! Hãy tiếp tục nói về những sai lầm. Lần này, chúng ta sẽ khám phá những lỗi mà trình biên dịch không phải lúc nào cũng giúp bạn. Hãy chú ý và bạn sẽ học được điều gì đó về bản thân."

"Tôi sẵn sàng lắng nghe, Diego. Tôi hy vọng điều này sẽ không quá xấu hổ đối với tôi."

So sánh các đối tượng với

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

6

"Danh sách các lỗi lập trình viên mới yêu thích hàng đầu của chúng tôi bắt đầu bằng việc so sánh các đối tượng (đặc biệt là các chuỗi) bằng

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

6toán tử"

Ví dụ:

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

"Tôi đã làm điều đó khá thường xuyên. Bây giờ tôi có thể thấy rõ ràng rằng mã này sẽ không bao giờ hiển thị "Các chuỗi bằng nhau", bởi vì câu

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

8lệnh so sánh các tham chiếu đến hai đối tượng chuỗi khác nhau."

"Vâng. Đó là lý do tại sao lựa chọn chính xác sẽ là:

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

Thay đổi

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

9đối tượng

"Những người mới lập trình thường quên rằng tất cả các đối tượng của lớp là bất biến và mọi phương thức của

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

9lớp đều trả về một đối tượng mới — đối tượng hiện tại không bao giờ thay đổi."

"Cách đây không lâu tôi đã học được ý nghĩa của bất biến , nhưng tôi nghĩ tôi đã làm được điều này.

"Tôi khá chắc chắn về điều đó. Ví dụ:

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

"Mã này rất giống với mã đúng, nhưng nó sẽ không hoạt động như mong đợi.

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

1Phương thức này không thay đổi đối tượng mà nó được gọi. Mã đúng sẽ trông như thế này:

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

"Chính xác. Tôi đã làm điều đó, nhưng tôi thậm chí không thực sự hiểu điều gì sai. Cảm ơn bạn đã giải thích!"

Quên khởi tạo các đối tượng là phần tử của mảng

"Một lỗi phổ biến khác là quên khởi tạo biến mảng. Ví dụ:

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

"Mã này sẽ không hoạt động: bạn cần đặt rõ ràng biến mảng bằng tham chiếu đến đối tượng vùng chứa sẽ lưu trữ các phần tử của mảng. Phiên bản chính xác:

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

Sử dụng một biến cục bộ thay vì một biến thể hiện.

"Người mới không thích nghĩ ra những cái tên dài và có ý nghĩa cho các biến."

"Điều đó rất đúng. Để hoàn thành công việc nhanh chóng, đôi khi tôi đặt các tên biến như

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

2,

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

3, và

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

4."

"Đừng làm thế. Đó là một điều tàn nhẫn khi mã có nhiều biến như thế:

Đưa số 99 vào 100 ô của mảng

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

"Sẽ khó mắc lỗi hơn nhiều trong mã có tên riêng. Phiên bản chính xác trông như thế này:

Đưa số 99 vào 100 ô của mảng

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

Xóa một mục bộ sưu tập

"Bạn đã xem qua các bộ sưu tập chưa?"

"Nghĩa đen chỉ bằng một con mắt."

"Nếu bạn không biết tôi đang nói về điều gì, thì hãy ghi chú lại cho chính mình để xem lại trong tương lai. Thường có những tình huống khi một phần tử nhất định cần được xóa khỏi bộ sưu tập. Đoạn mã trông giống như cái này:

ArrayList list = new ArrayList();
Collections.addAll(list, 0, -5, -7, -12, 5, 15);
for (Integer value: list)
   if (value < 0)
      list.remove(value);

"Mã này sẽ không hoạt động vì bạn không thể sử dụng

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

5vòng lặp để duyệt đồng thời các phần tử của bộ sưu tập và sửa đổi bộ sưu tập đó.

"Có một số giải pháp. Đầu tiên, bạn có thể duyệt qua một bộ sưu tập và thay đổi một bộ sưu tập khác:

Giải pháp 1

ArrayList list = new ArrayList();
Collections.addAll(list, 0, -5, -7, -12, 5, 15);
ArrayList copy = new ArrayList(list);
for (Integer value: copy)
   if (value < 0)
      list.remove(value);

"Thứ hai, kể từ Java 8, các bộ sưu tập có một

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

6phương thức mà bạn có thể chuyển một quy tắc (hàm lambda) cho biết phần tử nào cần xóa. Ví dụ:

Giải pháp 2

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

0

Đặt một số lớp với

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

7công cụ sửa đổi vào một tệp

"Chỉ có thể có một lớp công khai trong một tệp. Nhiều lớp hơn có thể được khai báo trong một tệp, nhưng chúng phải là các lớp bên trong của một lớp công khai hoặc không có công cụ sửa đổi. Ví dụ

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

7:

Nội dung của tệp Solution.java Ghi chú

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

1Điều này không được phép: hai lớp công khai trong một tệp.

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

2Nhưng bạn có thể làm điều này. Lớp chính không công khai

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

3Và bạn có thể làm điều này. Lớp chính là một lớp lồng nhau

Gọi các phương thức thông thường (không tĩnh) của một lớp từ

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

9phương thức tĩnh

"Đôi khi các lập trình viên mới cố gắng truy cập các biến và phương thức không tĩnh từ

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

9phương thức hoặc các phương thức tĩnh khác. Tất nhiên, mã như vậy sẽ không hoạt động.

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

4

"

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

1Phương thức chỉ có thể tham chiếu đến các phương thức/biến tĩnh. Chà, hoặc trước tiên nó phải tạo một thể hiện của lớp

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

2và chỉ sau đó mới gọi các phương thức không tĩnh của đối tượng đó. Ví dụ:

Giải pháp 1 Giải pháp 2

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

5

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

6

Khai báo một hàm tạo giống như một phương thức

"Một lỗi phổ biến khác là khai báo sai hàm tạo của lớp. Tên của hàm tạo phải giống với tên của lớp và hàm tạo không có loại kết quả. Các lỗi phổ biến nhất có dạng như sau:

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

7 Không nên có một loại trả lại ở đây

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

8 Tên hàm tạo không hợp lệ. Nó phải khớp với tên lớp

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

9

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

3đang mất tích. Biến

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

4sẽ được gán cho chính nó

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

0 Đó là tất cả các chính xác.

Kế thừa giao diện không chính xác

"Những người tạo ra Java đã cố gắng làm cho nó gần với tiếng Anh, vì vậy họ đã chọn các từ khóa khác nhau cho một số khái niệm liên quan.

Khi một lớp kế thừa một lớp, bạn phải sử dụng

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

5từ khóa:

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

1

"Khi một lớp kế thừa một giao diện, hay chính xác hơn là triển khai giao diện đó, bạn cần sử dụng từ

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

6khóa:

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

2

"Khi một giao diện kế thừa một giao diện, hãy sử dụng

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

5từ khóa:

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

3

Bỏ qua

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

8trong một

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

9tuyên bố

"Và sai lầm cuối cùng của ngày hôm nay, nhưng không phải là sai lầm cuối cùng đối với người mới bắt đầu, là không bao gồm một

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

8mệnh đề trong một

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

9mệnh đề. Ví dụ:

Sai Phải

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

4

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

5

"Bạn biết đấy, Diego... Đánh giá về hàng loạt lỗi mà bạn trình bày ở đây, có vẻ như bạn đang đọc nhật ký cá nhân của tôi... Hoặc bạn đang xem tôi giải quyết các nhiệm vụ."

"Ha! Đừng nghi ngờ gì về điều đó. Tôi đã đọc, theo dõi và tiếp tục làm như vậy. Vì vậy, hãy cảnh giác!"