Kiến thức so với kỹ năng
Đại học đã dạy chúng tôi rằng không có sự khác biệt lớn giữa lý thuyết và thực hành. Chà, chắc chắn bạn hiểu điều đó không giống nhau. Nhưng bạn không thấy sự khác biệt cốt lõi. Tuy nhiên, có một. Hầu hết mọi người đặt dấu bằng giữa “Tôi biết” và “Tôi có thể”. Bạn có? Làm thế nào về một vài ví dụ?- Tôi biết rằng hút thuốc có hại cho tôi, nhưng tôi hút thuốc.
- Tôi biết rằng thức ăn nhanh có hại cho tôi, nhưng tôi vẫn ăn.
- Tôi biết quy định giao thông nhưng tôi không thể lái xe.
- Tôi biết chạy bộ là tốt cho tôi nhưng tôi không chạy bộ vào buổi sáng.
Bạn đã đạt đến một cấp độ mới
Cấp 9
1 Risha, Dấu vết ngăn xếp
- Chào! Hôm nay tôi sẽ cho bạn biết dấu vết ngăn xếp là gì. Nhưng trước tiên hãy để tôi giải thích cho bạn ngăn xếp là gì. - Hãy tưởng tượng một chồng giấy tờ - bài tập cho một nhân viên thư ký nào đó. Một nhiệm vụ mới có thể được đặt lên trên cùng của ngăn xếp và anh ta sẽ nhận nhiệm vụ từ trên cùng của ngăn xếp. Vì vậy, các nhiệm vụ sẽ được thực hiện không phải trên một ai đến trước. Mỗi khi thư ký nhận nhiệm vụ cuối cùng. Cấu trúc bộ sưu tập như vậy được gọi là ngăn xếp . - Trong Java có một tập hợp đặc biệt - Stack. Bộ sưu tập này có các phương thức «thêm một phần tử» và «lấy (lấy/lấy đi) một phần tử». Như bạn đã biết, phần tử được thêm vào cuối cùng sẽ được lấy trước. - Hừm. Nó không khó, tôi đoán vậy. - Khỏe. Sau đó, hãy để tôi giải thích dấu vết ngăn xếp là gìlà. - Hãy tưởng tượng rằng trong Java hàm А gọi hàm B , và hàm sau gọi hàm C , đến lượt nó gọi hàm D . Vì vậy, để thoát khỏi chức năng B , trước tiên bạn phải thoát khỏi chức năng C và để làm như vậy, bạn phải thoát khỏi chức năng D . Điều này rất giống với một ngăn xếp. - Và điểm tương đồng là gì? - Trong ngăn xếp, để đến được một nhiệm vụ nào đó, bạn cũng phải hoàn thành tất cả các nhiệm vụ được đưa lên trên. - Chà, nó cũng giống như một phép loại suy, nhưng tôi không chắc liệu mình có hiểu đúng mọi thứ không. - Nhìn đây. Trong Java, ngăn xếp là một tập hợp các phần tử. Nó giống như những tờ giấy trong một chồng. Để lấy tờ thứ ba từ trên xuống, bạn phải lấy tờ thứ hai, nhưng trước đó bạn phải lấy tờ thứ nhất. Bạn luôn có thể đặt và lấy các trang tính, nhưng bạn chỉ có thể đặt chúng ở trên cùng và chỉ lấy từ trên xuống. Điều tương tự cũng áp dụng cho lệnh gọi hàm. Hàm А gọi hàm B , hàm sau gọi hàm C . Để thoát A , trước tiên bạn phải thoát B , và để làm điều này bạn phải thoát C . - Đợi tí. Nếu tôi hiểu đúng, toàn bộ ngăn xếp sẽ biến thành «chỉ trang cuối cùng được đặt trên ngăn xếp mới có thể được lấy» và «đầu tiên, hàm được gọi cuối cùng sẽ thoát». Là vậy sao? - Đúng. Vì vậy, chuỗi các lệnh gọi hàm là «ngăn gọi hàm» hoặc đơn giản là «ngăn xếp lệnh gọi». Chức năng được gọi cuối cùng phải được kết thúc trước. Hãy xem ví dụ: - OK. Tôi đoán mọi thứ đều rõ ràng với lệnh gọi hàm. Nhưng StackTraceElement này là gì ? - Máy ảo Java ghi nhật ký tất cả các lệnh gọi hàm. Với mục đích này, nó có một bộ sưu tập đặc biệt - ngăn xếp. Khi một hàm gọi một hàm khác, JVM sẽ đặt một phần tử mới StackTraceElement vào ngăn xếp này. Khi chức năng kết thúc, phần tử bị xóa khỏi ngăn xếp. Do đó, ngăn xếp này luôn lưu trữ thông tin cập nhật về trạng thái hiện tại của «ngăn xếp lời gọi hàm». - Mỗi StackTraceElementchứa thông tin về phương thức được gọi. Vì vậy, bạn có thể lấy tên của phương thức này bằng cách sử dụng getMethodName . - Ví dụ trên cho thấy:- Nhận «ngăn xếp cuộc gọi»:
- Lặp lại mảng bằng vòng lặp for-each . Tôi hy vọng bạn đã không quên nó.
- In tên phương thức thành System.out .
2 Diego, Tác vụ trên màn hình theo dõi ngăn xếp
- Này, Amigo! Đây là một nhiệm vụ nhỏ để hiển thị lên màn hình dấu vết ngăn xếp.nhiệm vụ | |
---|---|
1 | Mỗi phương thức sẽ trả về StackTrace Viết năm phương thức gọi lẫn nhau. Mỗi phương thức sẽ trả về StackTrace của nó. |
2 | StackTrace một lần nữa Viết năm phương thức gọi lẫn nhau. Mỗi phương thức sẽ trả về tên của phương thức gọi của nó. Bạn có thể lấy phương thức người gọi bằng StackTrace. |
3 | Phương thức này sẽ trả về số dòng của mã mà phương thức này được gọi từ Viết năm phương thức gọi lẫn nhau. Mỗi phương thức sẽ trả về số dòng của mã mà phương thức này được gọi từ đó. Sử dụng hàm element.getLineNumber() . |
4 | Dấu vết ngăn xếp của 10 cuộc gọi Viết mã để nhận dấu vết ngăn xếp của 10 cuộc gọi. |
5 | Phương thức sẽ trả về một kết quả - độ sâu theo dõi ngăn xếp của nó Viết một phương thức hiển thị và trả về độ sâu theo dõi ngăn xếp của nó. Độ sâu theo dõi ngăn xếp là số phương thức của nó (số phần tử trong danh sách). |
3 Elly, Lỗi và Ngoại lệ
- Này, Amigo! Hôm nay chúng ta có một bài học rất thú vị. Tôi sẽ cho bạn biết về các trường hợp ngoại lệ. Ngoại lệ là một cơ chế đặc biệt để kiểm soát lỗi trong chương trình. Dưới đây là một số ví dụ về các lỗi có thể xảy ra trong chương trình:- Chương trình cố gắng ghi một tệp vào đĩa đầy.
- Chương trình cố gắng gọi một phương thức của một biến lưu trữ tham chiếu null.
- Chương trình cố gắng chia một số cho 0.
- Khi xảy ra lỗi, máy ảo Java sẽ tạo một đối tượng đặc biệt – một ngoại lệ – chứa tất cả thông tin về lỗi. Đối với các lỗi khác nhau, có các ngoại lệ khác nhau.
- Sau đó, ngoại lệ này buộc chương trình phải ngắt chức năng hiện tại ngay lập tức và chức năng tiếp theo cho đến khi nó thoát khỏi phương thức chính. Sau đó chương trình kết thúc. Các nhà phát triển Java gọi quá trình này là «khôi phục ngăn xếp cuộc gọi».
- Nếu một ngoại lệ xảy ra bên trong khối thử , mã trong khối này không còn được thực thi nữa, nhưng quá trình bắt khối sẽ bắt đầu.
- Nếu không có ngoại lệ nào xảy ra, khối thử sẽ được thực hiện cho đến khi kết thúc và lệnh bắt không bao giờ được thực hiện .
4 Elly, RuntimeException, ném
- Hôm nay tôi quyết định đưa ra một chủ đề khác. Trong Java, tất cả các ngoại lệ được chia thành hai loại - được kiểm soát/kiểm tra và không được kiểm soát/không được kiểm soát . Các trường hợp ngoại lệ đã kiểm tra phải bị bắt, không được kiểm tra có thể bị bắt nhưng điều đó là không bắt buộc . - Có thể cố tình ném ngoại lệ vào mã không? - Trong mã của bạn, bạn có thể tự đưa ra các ngoại lệ. Bạn thậm chí có thể viết ngoại lệ của riêng bạn. Nhưng chúng ta sẽ đào sâu vào lỗ này sau. Bây giờ, hãy tìm hiểu cách làm việc với các ngoại lệ do máy ảo Java đưa ra. - ĐƯỢC RỒI. - Nếu ngoại lệ ClassNotFoundException và FileNotFoundExceptionđược ném (xuất hiện) trong một phương thức, lập trình viên phải chỉ định chúng trong chữ ký của một phương thức (tiêu đề phương thức). Những ngoại lệ như vậy được kiểm tra. Đó là những gì nó thường trông giống như: - Vì vậy, chúng tôi chỉ viết ném và liệt kê các ngoại lệ được phân tách bằng dấu phẩy. Phải? Là vậy sao? - Đúng. Nhưng có một điều thú vị khác. Để ví dụ bên dưới được biên dịch, phương thức gọi method1() phải bắt các ngoại lệ này hoặc ném chúng về phía trước. Nếu bạn muốn ném ngoại lệ đã kiểm tra về phía trước, bạn cần chỉ định nó trong tiêu đề của phương thức . - Một lần nữa, nếu trong phương thức chính , bạn muốn gọi một phương thức mà trong tiêu đề của nó có cụm từ throws FileNotFoundException,…sau đó bạn phải làm một trong hai điều sau:- để bắt ngoại lệ FileNotFoundException, …
Bạn sẽ phải bọc mã nơi bạn gọi một phương thức nguy hiểm bằng khối thử bắt - không bắt ngoại lệ FileNotFoundException,…
5 Risha, Chuyển ngăn xếp cuộc gọi, cách thực hiện trong các trường hợp ngoại lệ
- Tôi muốn nói với bạn thêm một chút về cách hoạt động của ngoại lệ. Ví dụ dưới đây giải thích rằng: - Tôi không hiểu. - Được rồi. Tôi sẽ giải thích những gì đang xảy ra. - Trong ví dụ bên trái, chúng ta gọi một số phương thức theo thứ tự chuỗi. Trong method2() , chúng tôi đặc biệt tạo và đưa ra một ngoại lệ (để bắt đầu báo lỗi). - Ví dụ bên phải cho thấy điều gì sẽ xảy ra. Nhìn vào method2() . Đó là những gì việc tạo một ngoại lệ biến thành: chúng ta tạo một đối tượng thuộc loại RuntimeException , lưu trữ nó trong một biến ngoại lệ đặc biệt và ngay lập tức thoát khỏi phương thức – return . - Ở phương thức 1 , sau khi gọi phương thức 2 sẽ có một dấu kiểm,có ngoại lệ hay không; nếu có một ngoại lệ, thì phương thức 1 sẽ chấm dứt ngay lập tức. Việc kiểm tra này được thực hiện ngầm sau khi gọi từng (!) phương thức Java. - Ồ! - Chính xác. - Trong cột bên phải trong phương thức chính , tôi đã viết điều gì sẽ xảy ra khi một ngoại lệ bị bắt bởi khối try-catch . Nếu không có ngoại lệ, mã sẽ tiếp tục thực thi theo kế hoạch. Nếu có một loại ngoại lệ được chỉ định trong catch , thì chúng tôi sẽ xử lý nó. - Và ném và instanceof nghĩa là gì? - Nhìn vào dòng cuối cùng bên trái ném new RuntimeException(s). Bằng cách này, chúng tôi tạo và ném một ngoại lệ. Đây chỉ là một ví dụ. Chúng tôi sẽ không làm điều đó cho đến nay. - Dùng lệnh « а instanceof B » ở khối bên phải ta kiểm tra đối tượng a có kiểu B hay không . Đó là, liệu đối tượng được lưu trữ trong biến ngoại lệ, có loại RuntimeException hay không . Đó là một biểu thức hợp lý. - Chà, nó đang trở nên rõ ràng hơn một chút.6 Diego, Nhiệm vụ bắt ngoại lệ
- Nhìn đây! Chú Diego đã mang đến một vài nhiệm vụ bắt cá cho bạn. Chúc bạn may mắn. Tôi nghĩ bạn sẽ cần nó. Hừ. - Này, Amigo! Dưới đây là một số nhiệm vụ bắt ngoại lệ thú vị.bắt nhiệm vụ | |
---|---|
1 | 1. Ngoại lệ khi thao tác với số Bắt ngoại lệ xảy ra khi chạy code: int a = 42 / 0; Hiển thị ngoại lệ ra màn hình, chỉ định loại của nó |
2 | 2. Ngoại lệ khi thao tác với chuỗi Bắt ngoại lệ xảy ra khi chạy code: String s = null; Chuỗi m = s.toLowerCase(); Hiển thị ngoại lệ ra màn hình, chỉ định loại của nó. |
3 | 3. Ngoại lệ khi thao tác với mảng Bắt ngoại lệ xảy ra khi chạy code: int[] m = new int[2]; m[8] = 5; Hiển thị ngoại lệ ra màn hình, chỉ định loại của nó. |
4 | 4. Ngoại lệ khi thao tác với tập hợp Danh sách Lưu ý ngoại lệ xảy ra khi chạy mã: ArrayList<String> list = new ArrayList<String>(); Chuỗi s = list.get(18); Hiển thị ngoại lệ ra màn hình, chỉ định loại của nó. |
5 | 5. Ngoại lệ khi thao tác với Map collection Lưu ý ngoại lệ xảy ra khi chạy code: HashMap<String, String> map = new HashMap<String, String>(null); map.put(null, null); map.remove(null); Hiển thị ngoại lệ ra màn hình, chỉ định loại của nó. |
7 Risha, Cách hoạt động của nhiều lần bắt
- Bây giờ, một số bài giảng thú vị hơn. Tôi thích giảng dạy rất nhiều. - Tôi muốn cho bạn biết cách bắt nhiều lần hoạt động. Trên thực tế, nó rất đơn giản: khi một ngoại lệ xảy ra trong khối try , việc thực thi chương trình được chuyển sang khối bắt đầu tiên . - Nếu loại được chỉ định trong ngoặc đơn của khối bắt giống với loại của đối tượng ngoại lệ, thì việc thực thi mã bắt đầu bên trong {}. Nếu không, chúng tôi đi đến đánh bắt tiếp theo . Việc kiểm tra được lặp lại ở đó. - Nếu không có khối bắt nào nữa , nhưng ngoại lệ chưa được bắt, nó sẽ bị ném về phía trước và phương thức hiện tại bị gián đoạn. - Tôi hiểu rồi. Quá trình bắt đó sẽ được thực thi, loại phù hợp với loại ngoại lệ. - Vâng đúng. Trên thực tế, nó phức tạp hơn một chút: Vấn đề là các lớp có thể kế thừa lẫn nhau. Nếu lớp «Cow» được kế thừa từ lớp «Animal», thì đối tượng kiểu «Cow» có thể được lưu trữ không chỉ trong một biến kiểu «Cow», mà còn trong một biến kiểu «Animal». . - Vậy thì sao? - Vì tất cả các ngoại lệ đều được kế thừa từ các lớp Exception hoặc RuntimeException (cũng được kế thừa từ Exception ), tất cả chúng có thể bị bắt bằng lệnh catch (Exception e) hoặc catch (RuntimeException e) . - Vậy thì sao? - Điều này có nghĩa rằng,trước tiên, bạn có thể bắt bất kỳ ngoại lệ nào bằng cách sử dụng lệnh catch(Exception e) . Thứ hai, thứ tự của các khối bắt có vấn đề. Ví dụ: - ArithmeticException do phép chia cho 0 bị bắt trong lần bắt thứ hai. - Trong ví dụ bên dưới, ArithmeticException bị bắt trong lần bắt đầu tiên , bởi vì các lớp của tất cả các ngoại lệ đều được kế thừa từ Exception. Vì vậy, Exception bắt bất kỳ ngoại lệ nào . - Trong ví dụ bên dưới, ngoại lệ ArithmeticException không bị bắt, nhưng được ném tới phương thức gọi. - Chà, giờ thì rõ ràng hơn rồi. Những ngoại lệ này không phải là dễ dàng. - Hình như chỉ có vậy thôi. Trên thực tế, đó là một trong những điều đơn giản nhất trong Java. - Không biết nên vui hay buồn đây…8 Diego, Nhiều nhiệm vụ bắt ngoại lệ
- Này, Amigo! Hôm qua tôi đã say và làm phức tạp hóa các nhiệm vụ của bạn, nhưng tôi hy vọng bạn không cảm thấy khó khăn và bạn sẽ giải quyết tất cả chúng chứ? Đó là vì lợi ích của chính bạn. Đây:nhiệm vụ | |
---|---|
1 | 1. Ngoại lệ Có một phương thức ném ra hai ngoại lệ kế thừa từ Exception và hai ngoại lệ còn lại kế thừa từ RuntimeException : NullPulumException , ArithmeticException , FileNotFoundException và URISyntaxException . Bạn cần bắt NullPulumException và FileNotFoundException , nhưng không bắt ArithmeticException và URISyntaxException . Làm thế nào để làm nó? |
2 | 2. Bắt ngoại lệ Có ba ngoại lệ kế thừa tuần tự từ Exception : class Exception1 extends Exception class Exception2 extends Exception1 class Exception3 extends Exception2 Có một phương thức được mô tả như sau: public static void method1() throws Exception1, Exception2, Exception3 Viết một lệnh bắt chặn để bắt cả ba Exception1 , Exception2 và Exception3 |
3 | 3. Bắt các ngoại lệ có chọn lọc 1. Tìm hiểu những ngoại lệ nào được ném ra bởi phương thức BEAN.methodThrowExceptions . 2. Phương thức processExceptions() nên gọi phương thức BEAN.methodThrowExceptions và xử lý các ngoại lệ: 2.1. nếu một ngoại lệ FileSystemException xảy ra, thì hãy ghi lại nó bằng cách gọi phương thức BEAN.log và ném về phía trước 2.2. nếu xảy ra ngoại lệ CharConversionException hoặc bất kỳ IOException nào khác , chỉ cần ghi nhật ký bằng cách gọi phương thức BEAN.log 3. Thêm lớp/loại ngoại lệ mà bạn đang chuyển tiếp trong 2.1. đến processExceptions()chữ ký phương thức. 4. Xử lý ngoại lệ còn lại trong phương thức main() và ghi nhật ký. Sử dụng try..catch Mẹo: Nếu bạn bắt gặp ngoại lệ MyException mà bạn không muốn bắt, bạn có thể ném nó về phía trước bằng mã sau: catch (MyException e) { throw e; } |
4 | 4. Bắt các ngoại lệ đã kiểm tra Xử lý tất cả các ngoại lệ đã kiểm tra trong phương thức processExceptions() . Bạn cần hiển thị lên màn hình từng ngoại lệ được kiểm tra đã xảy ra. Bạn chỉ có thể sử dụng một khối thử . |
5 | 5. Bắt các ngoại lệ không được kiểm tra Xử lý tất cả các ngoại lệ không được kiểm tra trong phương thức processExceptions() . Bạn cần hiển thị lên màn hình dấu vết ngăn xếp của từng ngoại lệ đã xảy ra bằng cách sử dụng phương thức printStack() . Bạn chỉ có thể sử dụng một khối thử . |
9 Giáo sư, Bài giảng về ngoại lệ
- Hôm nay chúng ta có một chủ đề siêu thú vị - ngoại lệ. Vào thời điểm đó, khi các nhà khoa học và lập trình viên trẻ vô cùng hào hứng với chủ đề này… - Xin lỗi, tôi phải đến phòng thí nghiệm. Dưới đây là ghi chú bài giảng. Tôi nghĩ rằng bạn sẽ tìm ra nó cho chính mình. Tại đây: Java Exceptions (Tài liệu Oracle) Xử lý ngoại lệ trong Java (điểm Java T) Java - Xử lý ngoại lệ (điểm hướng dẫn) Xử lý ngoại lệ Java cơ bản10 tháng 7
- Amigo, bạn nghĩ gì về bài học hôm nay? Bộ não positron của bạn vẫn chưa hoạt động sao? Nhiệm vụ của Diego đủ để làm mệt mỏi bất cứ ai. Hãy có một khoảnh khắc uống bia và thư giãn. Bạn vẫn còn đứng?11 Đội Trưởng Sóc
- Chào chú bộ đội! - Chào buổi sáng thưa ngài! - Tôi có một số tin tuyệt vời cho bạn. Đây là một kiểm tra nhanh để củng cố kỹ năng của bạn. Làm điều đó mỗi ngày và bạn sẽ nâng cao kỹ năng của mình thật nhanh. Các tác vụ được thiết kế đặc biệt để thực hiện trong Intellij IDEA.Các tác vụ bổ sung cần thực hiện trong Intellij Idea | |
---|---|
1 | 1. Chia cho 0 Tạo một phương thức public static void divisionByZero() , trong đó bạn cần chia bất kỳ số nào cho 0 và hiển thị ra màn hình kết quả của phép chia. Kết thúc cuộc gọi phương thức divisionByZero() thành một try..catch . Hiển thị lên màn hình dấu vết ngăn xếp ngoại lệ bằng cách sử dụng phương thức exception.printStackTrace() . |
2 | 2. Đếm ngược từ 10 về 0 Viết một vòng lặp để đếm ngược từ 10 về 0. Sử dụng Thread.sleep(100) để tạo độ trễ; Kết thúc cuộc gọi ngủ thành try..catch . |
3 | 3. Đưa một phương thức vào một try..catch Đọc các số từ bàn phím. Viết mã để đọc số từ bàn phím vào một phương thức riêng readData() . Gói toàn bộ nội dung của phương thức này (toàn bộ mã bên trong phương thức readData() , ngoại trừ phần khai báo danh sách nơi các số sẽ được lưu trữ) vào một try..catch . Nếu người dùng nhập một số văn bản thay vì nhập một số, phương thức phải bắt ngoại lệ và hiển thị ra màn hình tất cả các số đã nhập trước đó. Hiển thị số ra màn hình. Mỗi số phải nằm trên một dòng mới. Thứ tự các số phải giống như trong đầu vào. |
4 | 4. Bộ chuyển đổi ngày Đọc từ bàn phím một ngày ở định dạng «08/18/2013» Hiển thị ra màn hình ngày đó ở dạng «AUG 18, 2013». Sử dụng các đối tượng Date và SimpleDateFormat . |
5 | 5. Nguyên âm và phụ âm Viết chương trình đọc dòng từ bàn phím. Chương trình sẽ hiển thị lên màn hình hai chuỗi: 1) chuỗi đầu tiên phải chứa các nguyên âm 2) chuỗi thứ hai phải chứa các phụ âm và ký tự dấu chấm câu từ văn bản đã nhập. Tách các ký tự bằng dấu cách. Đầu vào ví dụ: Dừng nhìn nghe Đầu ra ví dụ: oooie stplklstn |
6 | 6. Chuyện cô bé quàng khăn đỏ 1. Có 5 lớp: Cô bé quàng khăn đỏ, bà ngoại, chú chó nhỏ, tiều phu, chó sói. 2. Mỗi lớp có hai trường kiểu ArrayList : bị giết và bị ăn. 3. Các đối tượng cần thiết đã được tạo sẵn (mũ, bà, ...). 4. Tạo mối quan hệ đúng (ai ăn ai giết ai) để có được logic của «Cô bé quàng khăn đỏ». |
7 | 7. Di chuyển các sửa đổi tĩnh Di chuyển các sửa đổi tĩnh để mã biên dịch. |
số 8 | 8. Danh sách mảng số Tạo danh sách có các phần tử là mảng số. Thêm vào danh sách năm mảng đối tượng có độ dài lần lượt là 5, 2, 4, 7, 0. Điền vào các mảng với bất kỳ dữ liệu nào và hiển thị chúng trên màn hình. |
9 | 9. Mười con mèo Tạo một lớp Cat với trường String name . Tạo một từ điển Map<String, Cat> , thêm 10 con mèo vào mô hình «Name» - «Cat». Lấy từ Bản đồ một Tập hợp tên và hiển thị tập hợp đó ra màn hình. |
nhiệm vụ tiền thưởng | |
---|---|
1 | 1. Chương trình không biên dịch và chạy. Sửa nó. Nhiệm vụ: Chương trình sẽ đọc từ bàn phím hai tên tệp và sao chép tệp đầu tiên vào vị trí được chỉ định bởi tên thứ hai. |
2 | 2. Thêm chức năng mới cho chương trình. Nhiệm vụ cũ: Chương trình sẽ đọc từ bàn phím hai tên tệp và sao chép tệp đầu tiên vào vị trí được chỉ định bởi tên thứ hai. Nhiệm vụ mới: Chương trình sẽ đọc từ bàn phím hai tên tệp và sao chép tệp đầu tiên vào vị trí được chỉ định bởi tên thứ hai. Nếu tệp (sẽ được sao chép) với tên được chỉ định không tồn tại, chương trình sẽ hiển thị trên màn hình thông báo «Tệp không tồn tại» và thử đọc lại tên tệp từ bảng điều khiển trước khi đọc tên của tệp thứ hai (đích). |
3 | 3. Học và thực hành thuật toán. Đọc từ bàn phím danh sách các từ và số. Hiển thị lên màn hình các từ theo thứ tự tăng dần và các số theo thứ tự giảm dần. Ví dụ đầu vào: Anh đào 1 Đậu 3 Táo 2 0 Dưa hấu Đầu ra ví dụ: Táo 3 Đậu 2 Anh đào 1 0 Dưa hấu |
GO TO FULL VERSION