2012-04-21 58 views
11

Tôi có một phương thức thực hiện kiểm tra và tính toán và trả về một lớp tùy chỉnh, returnMessage. returnMessage có 2 booleans và một String. Những gì tôi muốn làm là chạy phương thức này trong một vòng lặp while từ lớp chính của tôi và có quyền truy cập đối tượng returnMessage sau khi vòng lặp while kết thúc cho lần cuối cùng.Gán biến trong Java trong khi vòng lặp có điều kiện?

Trong php đây sẽ là một trường hợp

while ($returned = myObject->myMethod()->finished) 
{ 

} 

if($returned -> finished == FALSE) 
{ 
... 
} 

Tuy nhiên cố gắng để gán như thế này mang lại cho tôi một boolean dự kiến ​​lỗi trong java (có thể có lỗi php ở trên, đó là muộn: D)

+0

Sự khác biệt giữa PHP và Java ở đây là 'while' trong Java * yêu cầu * biểu thức boolean-typed (' someVar = boolExpr' chính nó là biểu thức boolean-typed). Nếu biến được gán là một 'bool' thì nó sẽ giống hệt nhau. Vui lòng hiển thị mã Java * hiện tại vì có khả năng là một thứ không phải là bool đang được gán. Trong mọi trường hợp, với vài ngoại lệ, tôi sẽ khuyên * không * sử dụng thành ngữ này ... –

Trả lời

27

Chúng ta cần phải xem chi tiết của mã của bạn, nhưng đoán một chút Tôi nghĩ rằng một cái gì đó như thế này sẽ làm việc:

ReturnMessage returned; 
while (!(returned = myObject.myMethod()).finished) { 

} 
if (!returned.finished) { 

} 
1

này có thể như vậy

while((returned=myObject.myMethod()).isFinished()){ 

} 

hay nói chính xác hơn (returned=myObject.myMethod()) gán đối tượng quay trở lại returned và bạn có thể sử dụng nó như một bình thường var

2

Trong khi chấp nhận được trong PHP, tôi đoán (tôi không mã trong PHP), nó được coi là hình thức cực kỳ xấu để thực hiện một nhiệm vụ trong một điều kiện trong Java. (Điều này là do nó là dễ bị lỗi và rất khó để phát hiện, sự khác biệt giữa = và == ở giữa rất nhiều mã. Đây là một sự lựa chọn có chủ ý dựa trên nhiều năm kinh nghiệm với C và C++.)

Vì vậy, tôi không thể theo dõi mã của bạn. Bạn nói "returnMessage có 2 booleans và một String" nhưng kiểm tra, như tôi hiểu trong PHP, là myObject->myMethod()->finished != nullreturned được đặt thành giá trị finished, nhưng sau đó bạn đi và kiểm tra $returned -> finished tương tự như myObject->myMethod()->finished->finished. Xin lỗi nếu tôi hiểu sai cú pháp PHP.

Các khuyến nghị chung trong Java sẽ được nhiều hơn dọc theo dòng:

ReturnMessage returned = myObject.myMethod().getFinished(); 
while (returned != null) { 

    ... 

    returned = myObject.myMethod().getFinished(); // or did you mean myObject.myMethod(); 
} 

if (!returned.finished) { // or, better: if (!returned.isFinished()) 
    ... 
} 

Nếu tôi hiểu lầm PHP, cho tôi biết và tôi sẽ sửa chữa các mã Java để phù hợp.

+0

điều này sẽ không bao giờ nhập vào vòng lặp while. – Highstead

+0

@Độ cao: Cố định. –

Các vấn đề liên quan