30/09/2018, 23:09
Hàm chỉ cho phép nhập số
Mình có hàm kiểm tra chỉ cho nhập số trong swing ntn. Khi chạy đáng ra kết quả là false, nhưng lại ra true. Các bác xem hộ sai ở đâu ạ
private static int[] number = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
public static boolean checkNumber(String s) {
boolean check = false;
char[] a = s.toCharArray();
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
for (int j = 0; j < number.length; j++) {
if (a[i] != number[j]) {
check = true;
}
}
}
return check;
}
public static void main(String[] args) {
boolean check = checkNumber("123");
System.out.println(check);
}
Bài liên quan
Vì bạn quên break và đặt lại kết quả.Như khi chuỗi này abcdef123abc
Thì mới đầu biến check sẽ là true.
Tuy nhiên gặp ký tự số nó vẫn là true vì bạn chưa chỉnh lại.
Nhưng nếu có chỉnh lại và chạy tiếp tới gặp abc thì nó lại set check lại = true tiếp
-> Sai
Vậy nên bạ nchir cần sửa lại một chút thành như thế này.
if(a[i] == number[i]) {
return false; //return luôn khỏi check chiết gì nữa. Vì nó đã sai rồi
}
Bó tay với bạn. Nếu số đầu tiên nó đúng thì return luôn chứ làm sao mà kiểm tra tiếp các số sau đc. Mà có kiểm tra được tiếp thì nó cũng sẽ không bao giờ so sánh ra kết quả true khi a là mảng char còn number là mảng int.
Cơ bản cách tiếp cận để giải bài này đã không đúng
A có thể nói rõ hơn không?
Vì e ko hiểu a nói gì???
Điều kiện if sai. Đọc comment của Voodoo là em hiểu.
Đối với loại bài này bạn nên sử dụng biểu thức chính quy( regular expression ) + bắt sự kiện khi nhập vào bạn nhé.
checkNumber(null) = false
checkNumber("") = false
checkNumber(" “) = false
checkNumber(“123”) = true
checkNumber(“12 3”) = false
checkNumber(“ab2c”) = false
checkNumber(“12-3”) = false
checkNumber"12.3”) = false
Vậy thôi.
Cái này phải đúng chứ.
Code của bạn vẫn chưa đủ.
-123.123
Nếu tác giả chỉ muốn bắt số nguyên thì cách này cũng ok. còn nếu mà có cái decimal, chắc dùng cái parse (float, double) rồi bắt exception cho nhanh nhỉ.
Số nguyên âm không đúng
À à =))
Chỉ cho phép đọc số, e đọc nhầm thành không cho phép đọc số.
Hèn gì…
@qtd top chỉ check từ 0-9 mà. Muốn check luôn decimal, nguyên âm luôn.
Không biết bạn có hiểu code không nữa khi bạn đi copy chỗ khác. Nhưng mình thấy thừa, như này có lẽ là đủ rồi
Sao ko ai dùng regular expression nhỉ??
Kể cả không cho phép đọc số thì em làm vậy vẫn sai. Không thể so sánh như vậy. Kết quả if luôn trả về false mà. Giống như Joe nói
Mảng số int Decimal giá trị 1 có index 0001 cột hexa bảng mã ASCII. Còn character ‘1’ ở vị trí 31. Lúc so sánh 01 không thể bằng 31
:)) e biết rồi, em bị nhầm 2 cái là
1/ hàm ko cho phép đọc số
2/ mảng kia là mảng ký tự đc init bởi các ký tự số (‘0’, ‘1’…).
Và như e hỏi ở trên. Sao mình ko dùng regex nhỉ :?
Tùy thôi. Ai muốn dùng thế nào thì dùng. Với anh thì cái nào dễ hơn thì làm.
@Voodoo. Which way u do in this case? TryParse or regex and Why?
Bạn vẫn chưa hiểu chỗ nào mình sẽ giải thích cho bạn? Code trên có gì đâu mà kêu không hiểu? Nó quá dài và check tất cả các trường hợp? Dù có copy code hay lấy ở đâu, nhưng nó vẫn là giải pháp tốt. Bạn thử dùng code của bạn check xem check được các định dạng này không?
checkNumber("-10f"), checkNumber("-10d")
Regular expression check đơn giản hơn nhưng performance không tốt, trừ khi check phức tạp quá thì dùng thôi, theo mình thì nên hạn chế.
nếu check số thực thì xài parseDouble cho chắc. Còn số nguyên thì có thể viết hàm tự chế hoặc xài parseInt cho khỏe luôn.
có vài cái “lạ” khi xài parseDouble http://rextester.com/SGYSC83641