首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >索引X超出长度Y的界

索引X超出长度Y的界
EN

Stack Overflow用户
提问于 2021-06-02 15:25:37
回答 1查看 187关注 0票数 0

出于某种原因,这段代码抛出了一个异常"Index 20 out of bounds for length 20"。我试着使用不同的System.out.println来尝试和调试这些代码,一旦到了最后一个周期,我就知道它超出了界限。我对java非常陌生。我试图理解这种语言,我无法理解我在这里做错了什么。“

这个问题的要点是使用这个数组序列返回一个字符串,它用一个子序列的第一个和最后一个替换连续的数字(例如,在下面的例子中,7,8,9,10,11将是7-11)。

用于调试的数组如下:

代码语言:javascript
复制
 int[] {-6, -3, -2, -1, 0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20}.

它应该返回string= "-6,-3-1,3-5,7-11,14,15,17-20"

代码语言:javascript
复制
if(arr[i]+1==arr[i+1]){
      
      while(arr[i+j]+1==arr[i+j+1]){
          end=arr[i+j+1];
          j++;
          
         System.out.println("j="+j);
        }

我已经尝试过在这一行代码和i=16之前打印,这意味着一旦它完成这个迭代,j=3 i将最终19岁并完成循环。(因为第27行"i+=j;“应该将i设置为19)。

希望我尽可能清楚地解释了这个问题,下面是我编写的代码。

代码语言:javascript
复制
class Solution {
        public static String rangeExtraction(int[] arr) {
      
      String res="";
      //int start=0;
      int end=0;
      int j=0;
     
      
      for(int i=0;i<arr.length;i++){
        
        System.out.println("i="+i);
        
        if(arr[i]+1==arr[i+1]){
          
          while(arr[i+j]+1==arr[i+j+1]){
              end=arr[i+j+1];
              j++;
              
             System.out.println("j="+j);
            }
          
          if(j!=1){ res+=arr[i]+"-"+end+","; }
          else{res+=arr[i]+","+end+",";}
          
          
          i+=j;
          j=0;
          
          }else{
          res+=arr[i]+",";
        }                
      }                
    return res.substring(0,res.length()-1);
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-02 15:37:49

您的指针指向数组长度之外的索引,您将其初始化为int arr。When you are move one index ahead like i+1 you need to run the loop n-1 time or length-1 time在if条件下也有i+j,为了克服这一点,您可以使用mod "%" operator,它将在数组长度内夹紧索引。当我在main函数中运行这个程序时,您可以取消对返回语句的注释。

代码语言:javascript
复制
 int arr[] = {-6, -3, -2, -1, 0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20};

  String res="";
  //int start=0;
  int end=0;
  int j=0;
 
  
  for(int i=0;i<arr.length - 1;i++){
    
    System.out.println("i="+i);
    
    if(arr[i]+1==arr[i+1]){
      
      while(arr[(i+j) % arr.length]+1==arr[(i+j+1) % arr.length]){
          end=arr[i+j+1];
          j++;
          
         System.out.println("j="+j);
        }
      
      if(j!=1){ res+=arr[i]+"-"+end+","; }
      else{res+=arr[i]+","+end+",";}
      
      
      i+=j;
      j=0;
      
      }else{
      res+=arr[i]+",";
    }
    
    
  }
    
    //return res.substring(0,res.length()-1);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67808096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档