Đây là câu hỏi rất kỳ quặc và khá cụ thể.Không sử dụng câu lệnh if trong Java
Rốt cuộc tôi đang cố gắng để viết một chuyển đổi chương trình mà mất trong nguồn java, và biến đổi nó như vậy mà nó không sử dụng (Trong số những thứ khác)
- Mảng
- Loops
- Người dùng xác định các phương pháp
- Nếu tuyên bố
Đây là thách thức mà tôi tự đặt ra, sau khi giáo viên của tôi nói với tôi rằng không thể viết một chương trình mà không sử dụng những thứ này.
Tôi có hầu hết các tính năng này, bao gồm chức năng nội tuyến và thay thế mảng, tuy nhiên tôi không thể tìm ra cách quản lý câu lệnh if.
Trong C++ tôi muốn sử dụng nhãn và ảnh và có thể ?:, tuy nhiên Java không hỗ trợ các câu lệnh GOTO.
Câu hỏi của tôi là thế này: Cho một phần của mã,
if(CONDITION)
{
//More code in here
}
Làm thế nào có thể biến nó như vậy mà nó có chức năng như nhau, tuy nhiên không sử dụng từ khóa if. Lưu ý rằng cấu trúc vòng lặp cũng nằm ngoài câu hỏi.
Với điều này, sẽ dễ dàng tạo ra người khác và nếu không, nếu có phát biểu. Tuy nhiên tôi cũng không chắc chắn về cách tạo vòng lặp bằng cách sử dụng này, vì không có câu lệnh và phương thức GOTO nào nằm ngoài câu hỏi.
Chỉnh sửa: Xin lưu ý rằng thiết bị chuyển mạch cũng không được phép hoặc không đệ quy (Loại trừ bởi thực tế là bạn không thể xác định phương pháp người dùng và chức năng chính đệ quy sẽ không hoạt động với mọi chương trình) không hoạt động cho mọi tình huống. AFAIK bạn không thể gọi một hàm void với?: Vì nó muốn gán một giá trị như là một phần của hoạt động của nó. Các điều kiện này đến từ Khoa học Máy tính SL yêu cầu khóa học, tôi lấy HL và là một lớp chúng tôi đã cười vào các yếu tố 'làm chủ' cho SL bao gồm các câu lệnh 'if' (Và nếu thực tế 3/15 trong số đó 'Các phương thức do người dùng định nghĩa với các tham số và kiểu trả về) Thử thách là có hiệu quả để FAIL kiểm tra làm chủ trong SL trong khi vẫn tạo ra một chương trình hoạt động chính xác.
trả lời: (Bằng bdares)
String result = (CONDITION)?"0":"A";
try{
Integer.parseInt(result);
//Condition is true
} catch(NumberFormatException e){
//Condition is false
}
Vòng lặp bằng goto và nhãn vẫn là vòng lặp, nó chỉ sử dụng cú pháp khác. Để thực sự loại bỏ các vòng lặp, bạn cần phải hủy bỏ chúng, tức là đặt các câu lệnh trong vòng lặp được thực hiện tuần tự thay thế. Sẽ không thể thực hiện được các vòng vô hạn (ví dụ: 'while (1)'.) –
@JoachimPileborg không đúng; anh ta không loại trừ việc sử dụng các vòng lặp của các thư viện được viết trước, vì vậy anh ta có thể (về mặt lý thuyết) viết 'java.util.Loop (myObject.class, 10);' nếu một thư viện như vậy tồn tại. Khi nó đứng, ông có thể hack một giải pháp ra khỏi, nói rằng, Bộ sưu tập các đối tượng. – bdares
http: //www.antiifcampaign.com/Tuy nhiên điều này là về cải thiện OOP (loại bỏ căng thẳng, ẩn logic lồng nhau như IFs thông qua thiết kế tốt hơn) – earcam