2012-02-21 64 views
8

這裏是我的代碼:循環通過數組中的元素向後

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

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

我想按降序排列,打印出的陣列,而不是升序(從數組的最後一個元素到第一),但我只是拋出這個錯誤:

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

這究竟是爲什麼?我希望通過使用myArray.length將計數器設置爲8,代碼將打印出數組的第8個元素,然後繼續打印。在Java中

+0

我不知道在Java中的數組索引的風格,但如果是相同的C,你要打印的數組元素列於第一次迭代數組邊界的.. – Mallik 2012-02-21 14:46:32

回答

45

陣列從0索引到length - 1,不1length,因此你應該相應地分配你的變量,並使用正確的比較操作。

你的循環應該是這樣的:

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

非常感謝這個工作很好 – JimmyK 2012-02-21 14:51:39

+0

我有這個,但不是從櫃檯拿走1我只是把它留下。工作很好。 – James111 2015-11-24 01:55:38

4
  • 第一個指數是0,最後一個指標是7不8
  • 數組的大小爲8
2

你從錯誤的索引開始。像這樣做:

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

數組的最後一個索引是它的長度減1

2

使用myArray.length-1

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

這裏的問題是這段代碼:myArray.length。在Java中,如在大多數其他語言,數據結構是基於0,所以最後一個元素具有structure.length - 1索引(並且第一個是0)。所以你的情況,你應該改變你的循環如下:

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

計數器開始它實際上是從1而不是0開始計數myArray.length的指數..

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

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

在此,給定陣列長度爲8作爲計數從1開始,但未來的索引myArray[0] = 1; 等....這裏索引計數從0開始 所以在你的一段代碼

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

走出陣列邊界,因此它顯示你ArrayIndexOutOfBoundsException