[英]I don't know why ArrayIndexOutOfBoundsException occur in Separate Chaining
[英]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”的示例
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.