2013-03-14 35 views
8
private String getWhoozitYs(){ 
    StringBuffer sb = new StringBuffer(); 
    boolean stop = generator.nextBoolean(); 
    if(stop = true) 
    { 
     sb.append("y"); 
     getWhoozitYs(); 
    } 
    return sb.toString(); 
} 

Đây là đoạn mã cho dự án tôi đang thực hiện trong khóa học lập trình. Vấn đề tôi gặp phải là sau khi khai báo boolean stop và cố gán một giá trị boolean được tạo ngẫu nhiên cho nó, tôi không thể sử dụng nó trong câu lệnh if để xác định xem tôi có nên thêm nhiều y vào StringBuffer hay không. Tôi có bộ tạo ngẫu nhiên bên trong một hàm tạo nên phần đó không phải là vấn đề. Tôi cho rằng kể từ khi tôi tuyên bố boolean bên ngoài tuyên bố nếu tôi sẽ có thể sử dụng nó bên trong, nhưng điều đó dường như không phải là trường hợp. Câu hỏi thực sự là làm thế nào tôi có thể sử dụng một boolean được xác định ngẫu nhiên trong một câu lệnh if.Làm thế nào để sử dụng boolean này trong một câu lệnh if?

+0

Hey tôi nghĩ rằng bạn có thể tìm ra cái này, đó là một câu đố hay .. nhìn lên khuôn. đặc biệt 0 và 1 – Coffee

+1

Ngoài ra, bạn chỉ có thể nói 'if (stop) 'Xem này - http://stackoverflow.com/questions/3793650/convert-boolean-to-int-in-java – Coffee

Trả lời

19

if(stop = true) phải là if(stop == true) hoặc đơn giản (tốt hơn!) if(stop). Đây là một cơ hội tốt để xem lý do tại sao luôn sử dụng if(something) nếu bạn muốn xem nếu đó là true thay vì viết if(something == true) (kiểu xấu!).

Bằng cách thực hiện stop = true thì bạn đang chỉ định true đến stop và không so sánh.

Vậy tại sao mã bên dưới câu lệnh if được thi hành?

Xem JLS - 15.26. Assignment Operators:

Vào lúc chạy, kết quả của biểu thức chuyển nhượng là giá trị của biến sau khi chuyển nhượng đã xảy ra. Kết quả của biểu thức gán không phải là một biến.

Vì vậy, vì bạn đã viết stop = true, khi đó bạn đáp ứng điều kiện if.

+4

Thực ra, nó chỉ nên là' nếu (dừng) '. Điều đó thậm chí không mở để hiểu sai do lỗi chính tả. : P – cHao

+0

nếu vẫn còn so sánh, nó chỉ là kể từ khi dừng được đặt thành true, nó sẽ luôn luôn đánh giá đúng. xin lỗi đây là một nitpick nhưng nó có vẻ giống như một cái gì đó giá trị giải thích (kể từ khi OP là một người mới bắt đầu). –

+0

Một trong những nghi ngờ ... 'if (stop)' và 'if (stop == true)' thứ hai cần chu kỳ cpu bổ sung để thực thi. Lập trình cả hai đều diễn giải giống nhau, vậy tại sao nó lại xấu để sử dụng? – kAmol

1

Kể từ stop là boolean bạn có thể thay đổi phần đó để:

//... 
if(stop) // Or to: if (stop == true) 
{ 
    sb.append("y"); 
    getWhoozitYs(); 
} 
return sb.toString(); 
//... 
1
if(stop == true) 

hoặc

if(stop) 

= là dành cho chuyển nhượng.

== là để kiểm tra điều kiện.

if(stop = true) 

Nó sẽ chỉ định đúng để dừng và đánh giá nếu (đúng). Vì vậy, nó sẽ luôn luôn thực thi mã bên trong nếu bởi vì dừng sẽ luôn được gán với đúng.

1

Hãy thử điều này: -

private String getWhoozitYs(){ 
    StringBuffer sb = new StringBuffer(); 
    boolean stop = generator.nextBoolean(); 
    if(stop) 
    { 
     sb.append("y"); 
     getWhoozitYs(); 
    } 
    return sb.toString(); 
} 
1

= là giao

ghi

if(stop){ 
    //your code 
} 

hoặc

if(stop == true){ 
    //your code 
} 
1

thêm bạn chỉ có thể viết

if(stop) 
{ 
     sb.append("y"); 
     getWhoozitYs(); 
} 
3

Trên thực tế, toàn bộ cách tiếp cận sẽ sạch hơn nếu bạn chỉ phải sử dụng một ví dụ của StringBuffer, thay vì tạo một trong mỗi cuộc gọi đệ quy ... Tôi sẽ đi cho:

private String getWhoozitYs(){ 
    StringBuffer sb = new StringBuffer(); 
    while (generator.nextBoolean()) { 
     sb.append("y"); 
    } 

    return sb.toString(); 
} 
Các vấn đề liên quan