gpt4 book ai didi

java - 当类中定义数组大小时,为什么会出现 ArrayIndexOutOfBounds 异常?

转载 作者:太空宇宙 更新时间:2023-11-04 15:07:29 25 4
gpt4 key购买 nike

对于我的项目,用户必须定义​​数组的大小,我创建了一个 set 方法来执行此操作。被更改的变量是类变量arraySize。但是,当有人设置数组大小并且我尝试添加数组时,我收到一个 indexoutofbounds 错误。

这是代码片段

    //Size of the array
private int arraySize;
//initializes elemnt count of array
private int arrayElementCount;

//Gets count of SID in array
public int getSIDArrayCount() {

//returns private variable
return arrayElementCount;
}

//Sets SID Array
public void setArraySize(int setArraySize) {
//Array size int
//checks array if array size is greater than 0
if (setArraySize > 0) {
//sets array size
//SIDArray
arraySize = setArraySize;
}

}

//SIDArray
private String[] SIDArray = new String[arraySize];

编辑:我无法在“setArraySize”方法中初始化数组,因为我需要数组的访问器方法。

这是类(class)的其余部分:

/*

* 要更改此许可证 header ,请在项目属性中选择许可证 header 。 * 要更改此模板文件,请选择“工具”|“模板 * 并在编辑器中打开模板。 */包 com.ahellhound.pkg202sidproject;

导入java.util.Arrays;导入java.util.regex.Pattern;

/** * *@作者科尔比·勒克莱尔 */公共(public)类 SIDArrayTest {

//Size of the array
private int arraySize;
//initializes elemnt count of array
private int arrayElementCount;

//Gets count of SID in array
public int getSIDArrayCount() {

//returns private variable
return arrayElementCount;
}

//Sets SID Array
public void setArraySize(int setArraySize) {
//Array size int
//checks array if array size is greater than 0
if (setArraySize > 0) {
//sets array size
//SIDArray
arraySize = setArraySize;
}

}

//SIDArray
private String[] SIDArray = new String[arraySize];
//Gets SID Array
public String[] getSIDArray() {

//returns array
return SIDArray;
}

//Validates SID; returns true if SID entry is valid
public boolean validateSID(String SIDEntry) {
//checks if sid entry is 7, and if starts with s
if (SIDEntry.length() != 7) {
//retuns false
return false;

}

//checks if SIDEntry begins with 'S'
if (!SIDEntry.matches("[sS]\\d{6}")) {

//returns false
return false;
}
//returns true
return true;
}

//Adds SID to the Array
public void addSID(String SIDEntry) {

//checks if SID is valid
if (validateSID(SIDEntry)) {
//Adds sid to array
SIDArray[arrayElementCount] = SIDEntry;
//increases array size by one
arrayElementCount++;

} else {

System.out.println("test failed 2");
}

}

//Gets SID array and returns all entrys to strings
public String getSIDArrayString() {
//Gets array and converts to string
String SIDArrayString = Arrays.toString(SIDArray);
//returns array string
return SIDArrayString;

}

}

当我为数组创建一个类变量,同时让数组具有“get”方法时,我真的对如何设置数组大小感到困惑。

最佳答案

您在调用 setArraySize 方法之前实例化数组,因此它的大小为 0。

//SIDArray
private String[] SIDArray = new String[arraySize];

由于 SIDArray 变量位于类的范围内,因此一旦创建类的对象,它就会被实例化。因此,它使用 arraySize 变量,该变量此时尚未实例化(如果是 int,则默认为 0)。

要解决此问题,只需在调用 setArraySize() 后实例化数组即可。

这里有一些代码来澄清我在评论中的意思。

public class A {
/* In your code, you instantiate the array at this point, in the scope of the class, while arraySize is still uninitialized */
String[] array; /* uninitialized, defaults to null */
int arraySize; /* uninitialized, defaults to 0 */

/* Simple accessor method for the array */
public String[] getArray() {
return array;
}

public int getArraySize() {
return arraySize;
}


public void setArraySize(int size) {
this.arraySize = size;
}

public void createArray() {
array = new String[arraySize];
}
}

关于java - 当类中定义数组大小时,为什么会出现 ArrayIndexOutOfBounds 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21800018/

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