簡體   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