Tại sao một biến phải được khai báo trong một khởi tạo vòng lặp for?


11
int v = 0;

for (v; v<2; v++) {
    ...

}

Tại sao điều này không được phép trong Java?

Tại sao chúng ta phải khai báo biến vtrong khởi tạo vòng lặp for? Tôi biết đó không phải là một tuyên bố nếu tôi làm như vậy nhưng tại sao Java không cho phép ở trên?


chúng tôi không; for(;;)
dehasi

3
vkhông được phép vì đó không phải là một tuyên bố: đó là cùng một lý do mà bạn không thể tự viết v;ở nơi khác.
Andy Turner

Bạn không cần nó cho một forvòng lặp nâng cao .
Arvind Kumar Avinash

Câu trả lời:


14

Nếu vđược khai báo trước vòng lặp, bạn nên để trống phần đầu tiên của câu lệnh for:

int v = 0;

for (; v < 2; v++) {
    ...
}

Không có ý nghĩa gì khi chỉ viết v;.


6

Khai báo vòng lặp của bạn là hợp lệ nếu bạn loại bỏ phần không liên quan vtrong phần khai báo (giả sử vđã được khai báo trước):

Thay đổi nó thành for(; v < 2; v++)

Tất cả ba công cụ sửa đổi trong forvòng lặp truyền thống là tùy chọn trong Java.

Ví dụ thay thế:

Dưới đây là giống như một while (true)vòng lặp:

for (;;) {

}

Thêm số gia tăng:

int j = 0;
for (int k = 0; k < 10; k++, j++) {

}

Thêm điều kiện bổ sung để chấm dứt vòng lặp:

int j = 0;
for (int k = 0; k < 10 || j < 10; k++, j++) {

}

Khai báo nhiều biến cùng loại:

for (int k = 0, j = 0; k < 10 || j < 10; k++, j++) {

}

Và rõ ràng bạn có thể trộn và kết hợp bất kỳ thứ nào trong số này theo ý muốn, hoàn toàn loại bỏ bất cứ thứ gì bạn muốn.


3

Theo tài liệu java

Hình thức chung của câu lệnh for có thể được trình bày như sau:

for (initialization; termination; increment) {
    statement(s)
}

...

Ba biểu thức của vòng lặp for là tùy chọn

Có nghĩa là bạn có thể tạo forvòng lặp và để trống một số 3 expr. Một trong các tùy chọn được khai báo int vtrước vòng lặp:

int v = 0;
for(; v<2; v++)

1

Bạn không phải khai báo một biến trong ForInit.

Như những người khác đã chỉ ra, bạn chỉ có thể bỏ qua ForInit; nhưng bạn cũng có thể sử dụng một danh sách các biểu thức câu lệnh ở đó.

Ví dụ: bạn có thể tạo các thể hiện lớp mới, gọi các phương thức và các biến gán / tăng / giảm:

int v;
for (new String(), "".toString(), v = 0, v++;;);

(Ví dụ này là vô nghĩa, nhưng hợp pháp)

Tuy nhiên, bạn không thể trộn các biểu thức câu lệnh này với các khai báo biến cục bộ.


0

Bạn không cần nó cho một forvòng lặp nâng cao .

public class Main {
    public static void main(String[] args) {
        int[] integers = { 10, 20, 30 };
        for (int x : integers) {
            System.out.println(x);
        }
    }
}

0

int w = 0;

trong TV;

cho (v; v <2; v ++) {

} bạn đã khai báo v trước vòng lặp nhưng bạn lại sử dụng mà không có bất kỳ khởi tạo nào.

nếu bạn sử dụng w đã được khai báo và khởi tạo trước thì sẽ không có vấn đề gì. Giống như mã bên dưới,

cho (; w <2; w ++) {

}

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.