我的代码有运行错误,任何人都可以帮我找出错误的地方

时间:2017-07-21 08:24:39

标签: java error-handling stack runtime infinite-loop

我得到运行时错误 - NZEC我的代码如下所示。我无法理解为什么。任何人都可以帮我解决这个问题。

问题陈述:城市中存在各种信号塔。拖拉机以直线水平线(从左到右)排列,每个塔在左右方向上传输信号.Tower如果A座塔位于B座左侧且A座塔高于B座,则A应阻挡B座的信号。因此,给定塔的信号范围可定义为:

{(给定塔左侧的连续塔的数量,其高度小于或等于给定塔的高度)+ 1}。

你需要找到每个塔的范围。

INPUT

第一行包含一个整数T,指定测试用例的数量。

第二行包含一个整数n,用于指定塔的数量。

第三行包含n个空格分隔的整数(H [i]),表示每个塔的高度。

输出

打印每个塔的范围(以空格分隔)。

约束

1 <= T <= 10

2&lt; = n&lt; = 10 ^ 6

1&lt; = H [i]&lt; = 10 ^ 8

我的代码

import java.util.*;
import java.io.*;



class TestClass {
    public static void main(String args[] ) throws Exception {
       BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
       int t=Integer.parseInt(br.readLine());
        Scanner sc = new Scanner(System.in);
       while(t!=0)
       {
           int n=Integer.parseInt(br.readLine());

           int arr[]=new int[n-1];
           int atest[]=new int[n-1];

           for (int i=0;i<n;i++)
           {
               arr[i]=sc.nextInt();
           }

           for(int j=n-1;j>=0;j--)
           {
               int count=0;
              int temp=j-1;
               while(arr[j]>=arr[temp])
               {

                   count++;
                   temp--;  

               }
               atest[j]=count;
           }

           for(int k=0;k<n;k++)
           {
              System.out.println(atest[k]+1);  
           }

           t--;

       }



    }
}

1 个答案:

答案 0 :(得分:0)

       int arr[]=new int[n-1];
       int atest[]=new int[n-1];

       for (int i=0;i<n;i++)
       {
           arr[i]=sc.nextInt();
       }

因为数组长度是n-1(arr.length = n-1)

这就是你得到ArrayIndexOutOfBoundsException的原因。