gpt4 book ai didi

java - ArrayIndexOutofBoundsException 错误但不知道为什么

转载 作者:行者123 更新时间:2023-12-01 17:38:05 25 4
gpt4 key购买 nike

所以我正在为“MiniString”创建一个类,它充满了对象MiniString的实例方法,每个MiniString都有一个实例变量,它是一个char[]。在测试我的方法时,我找不到 substring() 方法出错的地方。有两种子字符串方法,一种采用 int 参数,另一种采用两个 int 参数。我不断收到有关 one int 参数方法的错误。 substring 方法应该返回一个新的 MiniString,该新的 MiniString 由 int 参数指定的目标 Ministring 中的位置和目标 MiniString 的末尾之间的字符组成。我在 JUnit 测试器中不断遇到的错误如下:

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 方法中执行的操作。

关于java - ArrayIndexOutofBoundsException 错误但不知道为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4234513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com