2016-05-19 46 views
0
import java.util.Scanner; 
class Little_elephant 
{ 
    public static void main(String args[]) 
    { 
     Scanner scan = new Scanner(System.in); 
     int t = scan.nextInt(); 
     int arr[] = new int[100]; 
     int inversions, localInversions; 
     for(int i = 0; i < t; i++) 
     { 
      inversions = 0; 
      localInversions = 0; 
      int n = scan.nextInt(); 
      for(int j = 0; j < n; j++) 
      { 
       arr[j] = scan.nextInt(); 
      } 
      for(int j = 0; j < n - 1; j++) 
      { 
       for(int k = j + 1; j < n; k++) 
       { 
        if(arr[j] > arr[k]) 
        { 
         inversions++; 
        } 
       } 
       if(arr[j] > arr[j+1]) 
        localInversions++; 
      } 
      if(inversions == localInversions) 
       System.out.println("YES"); 
      else 
       System.out.println("No"); 
      } 
     } 
    } 
}  

程序在編譯時顯示沒有錯誤,但在第23行得到數組索引超出界限例外。此外,錯誤是當我嘗試多個案例即t> 1時。請有人幫助我!數組索引超出範圍第二個測試用例的例外

+0

那麼'n'的價值是什麼?理想情況下,展示一個[mcve] ......這看起來比展示問題要複雜得多,我懷疑在減少它的同時你會找到答案。 –

+0

請包括一些輸入,以及預期的輸出和/或描述程序的語義。 – Turing85

+1

這個問題可能因爲不包含MCVE而被關閉爲主題。請包括您使用的值,並且還應該努力改進您的變量名稱。 –

回答

1

你有一個循環for(int k = j + 1; j < n; k++)
你增加k但條件是j

0

你嵌套for循環對於k線21沒有說明對於k終止條款,而是對於j。所以,現在你的循環是這樣的:

for(int k = j + 1; j < n; k++) 

凡應該說:

for(int k = j + 1; k < n; k++) 

注意k如何是小於n小於n,不學家