You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建多对象时触发java.lang.ArrayIndexOutOfBoundsException求助

问题排查与修复方案

嘿,我一眼就看到你代码里的问题所在了,这个ArrayIndexOutOfBoundsException完全是因为你搞混了两个完全不同的变量——数组索引和向量维度,再加上一些逻辑上的小失误导致的。咱们一步步来拆解:

错误的核心原因

你在代码里用dim(用户输入的当前向量的维度)作为数组vek的索引,比如vek[dim].eingabe(),但vek数组的长度是an(你要创建的Polynom对象总数)。举个例子:如果要创建3个向量(an=3),那vek数组的合法索引只有0、1、2,但如果用户输入的维度dim=5,你去访问vek[5],数组根本没有这个位置,自然就触发越界错误了。

代码里的其他逻辑问题

除了索引用错,还有两个关键问题:

  1. 数组初始化位置错误:你把Polynom [] vek = new Polynom [an];放在了外部的for (int i=0; i<an;i++)循环里面,这意味着每次循环都会新建一个空数组,之前创建的对象都会被丢掉,完全达不到你要创建an个对象的目的。
  2. 多余的嵌套循环:内部的for (int x = 0; x < vek.length; x++)完全没必要,外部已经在循环an次了,这会导致你重复创建对象,逻辑彻底混乱。

修正后的代码

我把你的代码调整了一下,修复了这些问题,关键修改处都加了注释:

public static void main (String [] args) { 
    int an= readInteger ("Mit wie vielen Vektoren möchten Sie rechnen: "); 
    // 把数组初始化移到外部,只创建一次
    Polynom [] vek = new Polynom [an]; 

    // 循环创建an个Polynom对象
    for (int i =0; i<an;i++) { 
        System.out.println("Vektor v" +(i+1)); 
        System.out.println("Welche Dimension soll der Vektor" +(i+1) +" besitzen: "); 
        int dim = readInteger(); 

        // 先创建当前索引i对应的Polynom对象,传入维度dim
        vek[i] = new Polynom(dim); 

        System.out.println("Wie soll der Vektor gefüllt werden? \n" + 
            "(1) Werte eingeben \n" + 
            "(2) Vektor mit Zufallszahlen füllen \n" + 
            "(3) Vektor mit Nullen füllen \n"); 

        int a = readInteger(); 
        System.out.println("Auswahl: "+a +"\n"); 

        // 用当前数组索引i来访问对象,而不是dim!
        if (a==1) { 
            System.out.println("Bitte geben Sie die Elemente des Vektors ein: "); 
            vek[i].eingabe(); 
            vek[i].ausgabe(); 
        } else if (a==2) { 
            System.out.println(dim +" Zufallsvariablen wurden generiert "); 
            vek[i].Zufallszahlen(); 
            vek[i].ausgabe(); 
        } else if (a==3) { 
            System.out.println("Die " +dim +" Vektoren wurden mit Nullen gefuellt "); 
            vek[i].Nullen(); 
            vek[i].ausgabe(); 
        } 
    } 
}

关键修改说明

  • 把数组vek的初始化移到了外部循环之前,确保只创建一次,长度为an。
  • 每次循环中,先创建vek[i]对应的Polynom对象,把用户输入的dim作为维度传给构造函数。
  • 所有访问vek数组的地方都用当前循环的索引i,而不是dim,这样就不会出现索引越界的问题了。
  • 去掉了多余的内部x循环,逻辑变得清晰直接。

这样调整后,你的代码应该就能正常工作,不会再触发越界错误了。

内容的提问来源于stack exchange,提问作者Rick_C132

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:54:49