调用一个打印数组错误java的方法

时间:2016-04-13 15:12:09

标签: java

我需要调用一个返回字符串数组的方法,但是我一直收到错误。我做了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方法都返回字符串。

5 个答案:

答案 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]30

但是此代码中的1您尝试访问对java非法的索引2

因此,cp[3]= timeStamp();此代码会引发异常3

最好通常使用cp[3]= timeStamp();来避免这种异常。因为ArrayIndexBoundException可以自动增长。你将来永远不会遇到这类问题。

ArrayList<String>