ทำไมต้องประกาศตัวแปรใน for for initialization loop


11
int v = 0;

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

}

เหตุใดจึงไม่อนุญาตให้ใช้ใน Java

ทำไมเราต้องประกาศตัวแปรvใน for initialization loop? ฉันรู้ว่าไม่ใช่คำสั่งถ้าฉันทำเช่นนั้น แต่ทำไม Java ไม่อนุญาตข้างต้น


เราทำไม่ได้; for(;;)
— dehasi

3
vไม่ได้รับอนุญาตเพราะไม่ใช่ข้อความ: เป็นเหตุผลเดียวกับที่คุณไม่สามารถเขียนv;ด้วยตัวเองที่อื่น
— Andy Turner

คุณไม่จำเป็นต้องใช้สำหรับการforวนซ้ำขั้นสูง
— Arvind Kumar Avinash

คำตอบ:


14

หากvมีการประกาศก่อนลูปคุณควรปล่อยให้ส่วนแรกของคำสั่ง for ว่างเปล่า:

int v = 0;

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

v;ไม่มีความหมายเพียงแค่เขียนเป็น


6

การประกาศลูปของคุณถูกต้องหากคุณลบสิ่งที่ไม่เกี่ยวข้องvในการประกาศ (สมมติว่าvมีการประกาศล่วงหน้า):

เปลี่ยนเป็น for(; v < 2; v++)

ตัวดัดแปลงทั้งสามตัวในforลูปแบบดั้งเดิมเป็นตัวเลือกใน Java

ตัวอย่างทางเลือก:

ด้านล่างนี้เหมือนกับwhile (true)ลูป:

for (;;) {

}

การเพิ่มทีละพิเศษ:

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

}

การเพิ่มเงื่อนไขพิเศษเพื่อยุติการวนซ้ำ:

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

}

การประกาศตัวแปรประเภทเดียวกันหลายรายการ:

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

}

และแน่นอนว่าคุณสามารถผสมและจับคู่สิ่งเหล่านี้ตามที่คุณต้องการโดยไม่ต้องคำนึงถึงสิ่งที่คุณต้องการ


3

ตามเอกสารจาวา

รูปแบบทั่วไปของคำสั่ง for สามารถแสดงได้ดังนี้:

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

...

นิพจน์ทั้งสามของ for for loop เป็นทางเลือก

หมายความว่าคุณสามารถสร้างการforวนซ้ำและปล่อยว่างไว้ 3 expr หนึ่งในตัวเลือกที่มีการประกาศint vก่อนที่วง:

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

1

ForInitคุณไม่จำเป็นต้องประกาศตัวแปรใน

ตามที่คนอื่น ๆ ได้ชี้ให้เห็นคุณสามารถละเว้น ForInit ; แต่คุณสามารถใช้รายการคำสั่งนิพจน์ได้

ตัวอย่างเช่นคุณสามารถสร้างอินสแตนซ์ของคลาสใหม่เรียกใช้เมธอดและกำหนด / เพิ่ม / ลดตัวแปร:

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

(ตัวอย่างนี้ไร้สาระ แต่ถูกกฎหมาย)

อย่างไรก็ตามคุณไม่สามารถผสมนิพจน์คำสั่งเหล่านี้กับการประกาศตัวแปรท้องถิ่น


0

คุณไม่จำเป็นต้องใช้สำหรับการforวนซ้ำขั้นสูง

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;

int v;

สำหรับ (V; วี <2; วี ++) {

} คุณได้ประกาศvก่อนลูป แต่คุณใช้อีกครั้งโดยไม่มีการกำหนดค่าเริ่มต้น

ถ้าคุณใช้wซึ่งได้ประกาศไว้แล้วและเริ่มต้นก่อนหน้านั้นจะไม่มีปัญหาเช่นรหัสด้านล่าง

สำหรับ (; W <2; W ++) {

}

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.