Try catch java nhập từ bàn phím

Em muốn dùng try catch để nhập biến status phải là true hoặc false. Nếu không thì nhập lại. Nhưng nếu nhập sai thì nó tự trả về là false nên không so sánh được với false nhập từ bàn phím ạ. Mọi người giúp em với ạ.

do {
    try {
        System.out.println("Nhập trạng thái: ");
        status = Boolean.parseBoolean(sc.nextLine());
        System.out.println("===================================");
    } catch (Exception e) {
        System.out.println("Chỉ được nhập true hoặc false");
        System.out.println("Mời nhập lại trạng thái: ");
        status = Boolean.parseBoolean(sc.nextLine());
    }
} while ();

thêm biến để đánh dấu là nhập ok khởi tạo là false
nếu về try thành công thì gán nó là true dòng cuối trong block try
while (!is_done)

3 Likes

Boolean#parseBoolean không throw exception đâu cậu. Nếu cậu nhập vào xâu nào khác “true” (viết hoa hay thường đều được), method đó sẽ trả về false.
Cậu có thể tự viết hàm parse của riêng cậu, đại loại như thế này:

public boolean myParseBoolean(String original) {
    if("true".equalsIgnoreCase(original)) {
      return true;
    }
    if("false".equalsIgnoreCase(original)) {
      return false;
    }
    throw new IllegalArgumentException("Cannot parse " + original + " to boolean");
  }

Rồi sau đó cậu có thể try-catch được rồi :smile:

while(true) {
  try {
    awesomeBoolean = myParseBoolean(sc.nextLine());
    break;
  } catch (IllegalArgumentException ex) {
    // Boo hoo, do it again!
  }
}

See also: https://docs.oracle.com/javase/7/docs/api/java/lang/Boolean.html#parseBoolean(java.lang.String)

5 Likes

Mình cảm ơn ạ. Bình luận của bạn rất dễ hiểu :heart_eyes: nhưng bắt buộc là như thế này ạ. Có cách nào ngắn hơn không ạ

1 Like

Ohm, với Java core thì tớ e là không rồi.
Trong implementation của Boolean class, cả Boolean#parseBoolean lẫn Boolean#valueOf đều sử dụng chung implementation tớ kể ở trên.

Với thư viện bên ngoài, cậu có thể dùng thư viện apache.commons.lang3, trong đó có hàm org.apache.commons.lang3.BooleanUtils#toBoolean(String, String, String), với cách dùng như thế này:

BooleanUtils.toBoolean("true", "true", "false")  = true
BooleanUtils.toBoolean("false", "true", "false") = false
BooleanUtils.toBoolean("no", "true", "false") => IllegalArgumentException

See also: Javadoc

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?