Ví dụ String calculator
Bài toán: String calculator - cho phép thực hiện các phép tính với đầu vào là một xâu kí tự. Tác giả: Roy Osherove
Bài tập 1 - Phương thức add
Hướng dẫn thực hiện:
Lưu ý trước khi bắt đầu:
- Cố gắng làm đến đâu đọc đến đó chứ đừng đọc trước.
- Thực hiện từng bước một. Điểm quan trọng là học cách làm theo từng bước.
- Chỉ test với input hợp lệ. Bài thực hành nà không yêu cầu test với input không hợp lệ.
Trình tự các bước thực hiện:
- Tạo String calculator với một phương thức int add(string numbers)
- Phương thức có thể lấy 0, 1 hoặc 2 số, và sẽ trả về tổng của chúng (trả về 0 nếu gặp string rỗng) ví dụ "" or "1" or "1,2"
- Bắt đầu với test đơn giản nhất là một string rỗng, rồi đến một số và 2 số
- Nhớ rằng nên giải quyết bài toán bằng cách đơn giản nhất có thể, để bạn có thể buộc mình phải viết ra được các test mà trước đó bạn chưa nghĩ đến
- Nhớ refactor sau khi qua mỗi test
- Allow the Add method to handle an unknown amount of numbers
- Allow the Add method to handle new lines between numbers (instead of commas).
- the following input is ok: “1\n2,3” (will equal 6)
- the following input is NOT ok: “1,\n” (not need to prove it - just clarifying)
- Support different delimiters
- to change a delimiter, the beginning of the string will contain a separate line that looks like this: “//[delimiter]\n[numbers…]” for example “//;\n1;2” should return three where the default delimiter is ‘;’ .
- the first line is optional. all existing scenarios should still be supported
- Calling Add with a negative number will throw an exception “negatives not allowed” - and the negative that was passed.if there are multiple negatives, show all of them in the exception message
Dừng lại ở đây nếu bạn là người mới bắt đầu học. Tiếp tục nếu bạn hoàn thành các bước ở trên trong vòng ít hơn 30 phút.
- Các số lớn hơn 1000 cần bị lờ đi, nghĩa là 2 + 1001 = 2
- Delimiter có thể có độ dài tùy ở định dạng sau: “//[delimiter]\n” ví dụ: “//[***]\n1***2***3” cần trả về 6
- Cho phép định nghĩa các delimiter khác nhau kiểu thế này: “//[delim1][delim2]\n” ví dụ “//[*][%]\n1*2%3” cần trả về 6.
- đảm bảo là bạn cho phép xử lý cùng lúc nhiều delimeter với độ dài hơn 1 kí tự
Clip trình diễn bằng Java, sử dụng thư viện LamdaJ.