我需要调用一个返回字符串数组的方法,但是我一直收到错误。我做了Arrays.toString,但它仍然无法正常工作。
public class MyStore {
public static void main(String[] args) {
SalesAssociate salesAssoc = new SalesAssociate("Bob", "Jones", "001");
System.out.println(Arrays.toString(salesAssoc.getCashPosition()));
}//main
}//class
这是我的班级和方法。
public class SalesAssociate extends FloorAssociate {
// Constructor
public SalesAssociate(String firstName, String lastName, String employeeId) {
super(firstName, lastName, employeeId);
}
public String[] getCashPosition(){
String cp[] = new String[3];
cp[0]= super.getStoreLocation();
cp[1]= super.getEmployeeId();
cp[2]= "$3500";
cp[3]= timeStamp();
return cp;
}
}
这是我的错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at indassn3.SalesAssociate.getCashPosition(SalesAssociate.java:38)
at indassn3.MyStore.main(MyStore.java:21)
Java Result: 1
顺便说一句,super.getStoreLocation,super.getEmployeeId和timeStamp方法都返回字符串。
答案 0 :(得分:4)
String cp[] = new String[3];
cp[0]= super.getStoreLocation();
cp[1]= super.getEmployeeId();
cp[2]= "$3500";
cp[3]= timeStamp();
您正在创建一个长度为3的数组,然后尝试添加4个元素。长度为3的数组具有0到2的指数
答案 1 :(得分:1)
您声明了一个大小为 new String [3] 的数组。
这意味着该字符串中只有3个元素,但您尝试设置4(0,1,2,3)。将它增加到 new String [4] ,它应该可以正常工作。
答案 2 :(得分:1)
使用以下命令创建String数组:
String cp[] = new String[4];
<强>说明强>
以下一行:
String cp[] = new String[3];
创建一个包含 3个可能元素的数组:
cp[0]
cp[1]
cp[2]
但是稍微进入代码,你写道:
cp[3]= timeStamp();
这会尝试为 4rth 元素赋值,这个值超出范围,从而抛出ArrayIndexOutOfBoundsException
。请记住,第一个元素位于数组中的第0位。
答案 3 :(得分:1)
使用没有ArrayIndexOutOfBoundsException的ArrayList:)
public static void main(String[] args)
{
ArrayList<String> cp = new ArrayList();
cp.add("1");
cp.add("2");
cp.add("3");
cp.add("4");
cp.add("5");
}
答案 4 :(得分:0)
在您给定的代码中
main()
此语句#include <stdio.h>
int main(void) {
char type, letters[10] = { };
char vowels[6] = { 'A', 'E', 'I', 'O', 'U' };
char consonants[21] = { 'B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'X', 'Y', 'Z' };
int i, k, v, l, c;
for (i = 0; i < 9; i++) {
printf("Vowel or consonant? (V/C)\n");
scanf(" %c", &type);
if (type == 'V')
for (k = 0; k<1; k++) {
v = (rand() % 5);
letters[i] = vowels[v];
}
if (type == 'C')
for (l = 0; l<1; l++) {
c = (rand() % 21);
letters[i] = consonants[c];
}
else
printf("Invalid!");
break;
}
printf("%s", letters);
return 0;
}
创建长度为 String cp[] = new String[3];
cp[0]= super.getStoreLocation();
cp[1]= super.getEmployeeId();
cp[2]= "$3500";
cp[3]= timeStamp(); //problem with this code actually.
的String数组。因此,可访问的索引为new String[3]
,3
和0
。
但是此代码中的1
您尝试访问对java非法的索引2
。
因此,cp[3]= timeStamp();
此代码会引发异常3
。
最好通常使用cp[3]= timeStamp();
来避免这种异常。因为ArrayIndexBoundException
可以自动增长。你将来永远不会遇到这类问题。
ArrayList<String>