ArrayIndexOutofBoundsException错误但不知道原因

dee*_*x11 0 java methods instance

所以我正在为"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)
Run Code Online (Sandbox Code Playgroud)

这是我的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++;
  }
 }
Run Code Online (Sandbox Code Playgroud)

这是两个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;
 }
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

Don*_*oby 5

在你的第一个substring方法,行

range.miniscule[i] = this.miniscule[i];
Run Code Online (Sandbox Code Playgroud)

是最可能的嫌疑人.我希望你真的想要

range.miniscule[i - start] = this.miniscule[i];
Run Code Online (Sandbox Code Playgroud)

String 有一些子串方法可以完成你在这里所做的大概,但我认为你这样做是为了学习,而不是为生产用途重新创建字符串处理.

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