Hỏi về Java JOptionPane

hi! mình đang làm bài tập về Java! về JOptionPane.

Mình đã làm được phần đầu! chỉ còn Hacker Challenge!!
Yêu cầu khi mình click close thì nó sẽ quay trở về câu hỏi “Are you 21 years of age or older?” đến khi mình trả lời YES or NO.

Mình đã thử tạo for loop,
default:
JOptionPane.showMessageDialog(null, “You must answer the question.”,“Aversion Detected”,
JOptionPane.ERROR_MESSAGE);

for (response=-1;response< Double.POSITIVE_INFINITY;response++)

JOptionPane.showConfirmDialog(null,“Are you 21 years of age or older?”,
“Age Verification”,JOptionPane.YES_NO_OPTION);

Nhưng khi mình click Yes or no nó ko chạy típ mà cứ xuất hiện bảng “Are you 21…”

Vấn đề ở trong vòng for không có cơ chế ngắt khi nhấn yes hoặc no

1 Like

vậy mình làm như thế nào vậy bạn?

Đổi showMessageDialog thành showConfirmDialog, get ra action close nào của user, nếu thuộc 2 nút yes/nó thì break vòng lặp
Ps: nên đổi vòng for như của bạn thành for(;:wink: hoặc while(true)

1 Like

thầy mình yêu cầu khi mình click Close thì nó sẽ hiện típ ra bảng hỏi Are you 21… đến khi nào mình trả lời yes or no. (nó phải ra Proceed on! adult khi mình chọn yes. Hoặc You shall not pass khi mình chọn No)
NHƯNG nó lại ko ra như vậy! nó chỉ ra bảng “Are you 21…” dù mình click yes or no!!! :frowning:

y

Đây là bài mình đang làm!!

Bạn có thể giải thích kỹ ý của bạn được ko? mình vẫn chưa hiểu lắm! Thanks bạn!

    public static void main(String[] args) {
        while (true) {
            int response = JOptionPane.showConfirmDialog(null,
                    "Are you 21 years of age or older?", "Age Verification", JOptionPane.YES_NO_OPTION);
            if (response == JOptionPane.YES_OPTION) {
                JOptionPane.showMessageDialog(null, "Proceed on, adult!", "You are an Adult",
                        JOptionPane.INFORMATION_MESSAGE);
                break;
            } else if (response == JOptionPane.NO_OPTION) {
                JOptionPane.showMessageDialog(null, "You shall not pass!", "Minor Detected",
                        JOptionPane.ERROR_MESSAGE);
                break;
            }
            JOptionPane.showMessageDialog(null, "You must answer the question.", "Aversion Detected",
                    JOptionPane.ERROR_MESSAGE);
        }
    }

code chỉ đơn giản thế này thôi, sao bạn làm dài dòng và lặp code thế nhỉ

3 Likes

Cái vấn đề đó là do cái vòng for của bạn, bạn cho response chạy từ -1 cho đến Double.POSITIVE_INFINITY (1 con số vô cùng lớn, chứ chưa nói đến là vô tận), và mỗi lần lặp nó sẽ hiện cái bảng “Are you fucking kidding me ?” ra, và cứ thế lặp lại đến khia nào chán thì thôi —> Mình không hiểu bạn đặt cái for đó để làm gì. Bạn muốn quay lại tác vụ lúc ban đầu nếu như không thỏa điều kiện, sao không dùng while, hay do while;

Ở đây mình xin đề cử cách làm do while:
Bỏ cái default đi, rồi đem đặt dòng lệnh do while, điều kiệu trong while là response không phải là YES_OPTION hoặc NO_OPTION

đây là ví dụ cho bạn tham khảo:

public static void main(String[] args) {
int x = -1;
do{
x = JOptionPane.showConfirmDialog(null, "Exit ?", "Exit",
JOptionPane.YES_NO_OPTION);
        
if (x == JOptionPane.YES_OPTION) {
System.exit(0);
}else if (x == JOptionPane.NO_OPTION){
 continue;
}
} while (x != JOptionPane.YES_OPTION || x != JOptionPane.NO_OPTION);
}

trong trương hợp này mình dùng if, else if nhưng cách này vẫn chạy được cho switch case

3 Likes

Ok!! I got it!!! Thanks, guys!!!
Have a nice day!!!

2 Likes

You are welcome !!! Stay awesome !!! :grin:

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