繁体   English   中英

ArrayIndexOutofBoundsException错误,但不知道为什么

[英]ArrayIndexOutofBoundsException Error but don't know why

因此,我为“ MiniString”创建一个类,该类仅充满对象MiniString的实例方法,每个MiniString都有一个实例变量,该实例变量是char []。 测试我的方法时,我无法找到substring()方法出了什么问题。 有两种子字符串方法,其中一种采用int参数,另一种采用两个int参数。 我一直在一个int参数方法上得到错误。 应该使用substring方法返回一个新的MiniString,该字符串由int参数指定的目标Ministring中的位置与目标MiniString的末尾之间的字符组成。 我不断进入JUnit Tester的错误如下:

java.lang.ArrayOutofBoundsException:22
at MiniString.substring(MiniString.java:141)
at MiniString.substring(MiniString.java:159)

这是我的对象MiniString的构造函数:

private char[] miniscule;

 MiniString(char[] array){
  int i = 0;
  miniscule = new char[array.length];
  while (i < array.length){
   miniscule[i] = array[i];
   i++;
  }
 }
 MiniString(String string){
  int i = 0;
  miniscule = new char[string.length()];
  while (i < string.length()){
   this.miniscule[i] = string.charAt(i);
   i++;
  }
 }

这是两个substring()方法的代码:

public MiniString substring(int start, int end){
  int i = start; 
  if (end > start){
   char[] temp = new char[end - start];
   MiniString range = new MiniString(temp);
   while (i < end){
    range.miniscule[i] = this.miniscule[i];
    i++;
   }
   return range;
  }
  else{
   char[] temp = new char[1];
   MiniString range = new MiniString(temp);
   range.miniscule[0] = 0;
   return range;
  }
 }
 public MiniString substring(int position){
  int start = position;
  int end = this.miniscule.length;
  char[] temp = new char[end - start];
  MiniString output = new MiniString(temp);

  output = substring(start, end);
  return output;
 }

谢谢你的帮助!

在您的第一substring方法中,

range.miniscule[i] = this.miniscule[i];

是最有可能的嫌疑犯。 我希望你真的想要

range.miniscule[i - start] = this.miniscule[i];

String具有子字符串方法,这些方法大致可以完成您在此处所做的事情,但是我想您是在学习该方法,而不是为了生产目的而重新发明字符串处理。

如果您使用的是Java 6,则可能还需要查看Arrays.copyOfRange(T[] ts, int i, int i1)方法,该方法完成了您在substring方法中所做的大部分工作。

唐已经指出了您的问题所在,这里还有一些其他想法

字符串“ hello”的示例

  • 好:开始= 0,结束= 5 => i = 0,range.length = 5,range.miniscule [i]在范围内
  • 错误:开始= -1,结束= 0 => i = -1,range.length = 1,但range.miniscule [i]超出了-1的范围
  • 错误:开始= 4,结束= 5 => i = 4,range.length = 1但range.miniscule [i]超出范围
  • 错误:开始= 0,结束= 7 => i = 0,this.miniscule [i]将失败5和6

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM