Java ArrayIndexOutOfBounds仅用于打印

Java ArrayIndexOutOfBounds仅用于打印,java,indexoutofboundsexception,Java,Indexoutofboundsexception,我不明白为什么会这样。如果没有print语句,代码可以正常工作,但是当我尝试打印元素时,会得到ArrayIndexoutOfBounds。例如,如果我尝试输入3个元素,就会抛出异常。谁能解释一下吗 class MyClass { int search(OtherClass obs,target) { double a[]=new double[obs.length]; for(int i=0;i<obs.length;i++) {

我不明白为什么会这样。如果没有print语句,代码可以正常工作,但是当我尝试打印元素时,会得到ArrayIndexoutOfBounds。例如,如果我尝试输入3个元素,就会抛出异常。谁能解释一下吗

class MyClass
{
    int search(OtherClass obs,target) {
        double a[]=new double[obs.length];
        for(int i=0;i<obs.length;i++)
        {
            a=obs[i].getTarget();
            System.out.println(a[i]);//without this it does not throw
        }
    }
}

class OtherClass
{
    String Target;

    public String getTarget() {
        return target;
    }

    public void setTarget(String target) {
        this.target = target;
    }
}
class-MyClass
{
整数搜索(其他类obs,目标){
双精度a[]=新双精度[obs.length];
对于(int i=0;i
但不是

System.out.println(a[i])

您应该使用它,此语句将值从
obs[i].getTarget()
设置为
a[i]

a[i]=obs[i].getTarget();
编辑:

如果
getTarget()

for(int i=0;i<obs.length;i++)
{
    double a[] =obs[i].getTarget(); // putting the array from getTarget() to a[]
    for(int j=0;j<a.length;j++)
    System.out.println(a[j]);//printing all the values of a[]
}

for(int i=0;i在您的代码中
obs
是一个数组:
obs[i]
;该数组的每个位置本身就是另一个数组:
obs[i].getTarget()#=>double[]
我想如果真的
obs
有一个名为
getTarget()
的方法返回数组……可能是这样吗

double a[] = new double[obs.length];
double obsArray[] = obs.getTarget();
for(int i=0; i<obs.length; i++){
 a[i] = obs[i];
 System.out.println(a[i]);
}
double a[]=新的双精度[obs.length];
双obsArray[]=obs.getTarget();

对于(int i=0;我可以修复并重新格式化您的代码吗?现在它将无法编译。而且
a[i]
很可能甚至无法工作,因为它不是数组。ya a是数组。很抱歉,我忘了在这里声明
class Other class
无效-您的意思是
class Other class
。您缺少很多
{}
s.
OtherClass
没有length属性。总之,这不会按原样编译。
int search(OtherClass obs,target){
有两个参数-您只给其中一个参数指定了一个类型。
getTarget()
返回一个
字符串
,因此无法将其分配给arraydoes getTarget()方法返回数组?很抱歉getTarget不是string array类型…而是string
int search(OtherClass obs,target){
-
obs
不是数组(并且忽略第二个参数没有类型,因此无法编译)。我试着猜测anonymous想要什么来回答它……但是当我回到这里时,代码已经改变了。我想,如果obs真的是一个数组(因为最后的s),你能解释一下吗。为什么它不会打印,因为你对一个字符串做了一个类似于a=“Hello”;System.out.println(a[3])的索引;字符串不是列表,因此不能对其进行索引。这同样适用于int,也适用于int。您不能对int进行索引,而只能对int数组进行索引。
double a[] = new double[obs.length];
double obsArray[] = obs.getTarget();
for(int i=0; i<obs.length; i++){
 a[i] = obs[i];
 System.out.println(a[i]);
}