Tôi đang viết một phương pháp chu trình cho danh sách di chuyển một chỉ mục về phía trước hoặc ngược. Các mã sau đây được sử dụng để chu kỳ ngược:Panicked tại 'cố gắng trừ với tràn' khi đạp ngược trở lại mặc dù một danh sách
(i-1)%list_length
Trong trường hợp này, i
là loại usize
, có nghĩa là nó là unsigned. Nếu i
bằng 0, điều này dẫn đến lỗi 'cố gắng trừ với tràn'. Tôi đã cố gắng sử dụng các phương pháp truyền chính xác để giải quyết vấn đề này:
((i as isize)-1)%(list_length as isize)) as usize
Điều này dẫn đến tràn số nguyên.
Tôi hiểu tại sao lỗi xảy ra và tại thời điểm này tôi đã giải quyết được vấn đề bằng cách kiểm tra xem chỉ mục có bằng 0 hay không, nhưng tôi đã tự hỏi có cách nào giải quyết nó hay không bằng cách truyền các biến đến đúng loại.
Là một phần: Tôi không nghĩ bạn muốn làm điều đó *. -1% 10) 'là' -1', không phải '9'. '-1isize as usize' là' 18446744073709551615' (trên kiến trúc 64 bit). –
Ok, tôi không biết. Tôi nghĩ nó hoạt động như được mô tả trong [bài đăng này] (http://math.stackexchange.com/questions/519845/modulo-of-a-negative-number), nhưng bây giờ tôi thấy rằng nó được thực hiện như được mô tả trong [điều này post] (http://stackoverflow.com/questions/31210357/is-there-a-modulus-not-remainder-function-operation). Điều đó xóa nó lên! – blackplant