2012-02-21 34 views
8

Dưới đây là mã của tôi:Looping thông qua các yếu tố trong một mảng ngược

int myArray[]={1,2,3,4,5,6,7,8}; 

for(int counter=myArray.length; counter > 0;counter--){ 
    System.out.println(myArray[counter]); 
} 

Tôi muốn in ra mảng theo thứ tự giảm dần, thay vì thứ tự tăng dần (từ yếu tố cuối cùng của mảng để là người đầu tiên) nhưng tôi chỉ bị ném lỗi này:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8 
    at task1.main(task1.java:14) 

Tại sao điều này xảy ra? Tôi đã hy vọng rằng bằng cách sử dụng myArray.length để đặt bộ đếm đến 8, mã sẽ chỉ in ra phần tử thứ 8 của mảng và sau đó tiếp tục in cái trước đó.

+0

Tôi không biết kiểu lập chỉ mục mảng trong Java, nhưng nếu nó giống như trong C, bạn đang cố gắng in phần tử mảng ra khỏi giới hạn mảng trong lần lặp đầu tiên .. – Mallik

Trả lời

45

Mảng trong Java được lập chỉ mục từ 0 để length - 1, không 1 để length, do đó bạn nên gán biến của bạn cho phù hợp và sử dụng các toán tử so sánh chính xác.

vòng lặp của bạn sẽ trông như thế này:

for(int counter=myArray.length - 1; counter >= 0;counter--){ 
+0

Cảm ơn rất nhiều công việc này tuyệt vời – JimmyK

+0

Tôi đã có điều này nhưng thay vì lấy đi 1 từ truy cập tôi chỉ còn lại nó như là. Công việc tốt đẹp. – James111

4
  • Chỉ số đầu tiên là 0 và chỉ số cuối cùng là 7 không 8
  • Kích thước của mảng là 8
2

Bạn đang bắt đầu sai chỉ mục. Làm điều đó như thế này:

for(int counter= myArray.length - 1; counter >= 0;counter--) { 

Chỉ số cuối cùng của một mảng là chiều dài của nó trừ đi 1.

2

sử dụng myArray.length-1

for(int counter=myArray.length-1; counter >= 0;counter--){ 
       System.out.println(myArray[counter]); 
      } 
3

Vấn đề ở đây là đoạn mã này: myArray.length. Trong Java, như trong hầu hết các ngôn ngữ khác, cấu trúc Dữ liệu là 0 dựa, vì vậy phần tử cuối cùng có chỉ mục là structure.length - 1 (và đầu tiên là 0). Vì vậy, trong trường hợp của bạn, bạn nên thay đổi vòng lặp của bạn như sau:

for(int counter=myArray.length - 1; counter >= 0;counter--){ 
      System.out.println(myArray[counter]); 
     } 
2

truy cập được bắt đầu từ chỉ số của myArray.length mà thực sự là tính từ 1 thay vì 0 ..

for(int counter=myArray.length - 1; counter > 0; counter--){ 
0

int myArray[]={1,2,3,4,5,6,7,8};

ở đây, đưa chiều dài mảng là 8 như đếm bắt đầu từ 1 nhưng sắp tới cho các chỉ số myArray[0] = 1; và vân vân .... đây đếm chỉ số bắt đầu từ 0. vì vậy, trong phần code của bạn

for(int counter = myArray.length - 1; counter >= 0; counter--) { 

nằm ngoài ranh giới mảng để nó hiển thị cho bạn ArrayIndexOutOfBoundsException.

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