创建多对象时触发java.lang.ArrayIndexOutOfBoundsException求助
问题排查与修复方案
嘿,我一眼就看到你代码里的问题所在了,这个ArrayIndexOutOfBoundsException完全是因为你搞混了两个完全不同的变量——数组索引和向量维度,再加上一些逻辑上的小失误导致的。咱们一步步来拆解:
错误的核心原因
你在代码里用dim(用户输入的当前向量的维度)作为数组vek的索引,比如vek[dim].eingabe(),但vek数组的长度是an(你要创建的Polynom对象总数)。举个例子:如果要创建3个向量(an=3),那vek数组的合法索引只有0、1、2,但如果用户输入的维度dim=5,你去访问vek[5],数组根本没有这个位置,自然就触发越界错误了。
代码里的其他逻辑问题
除了索引用错,还有两个关键问题:
- 数组初始化位置错误:你把
Polynom [] vek = new Polynom [an];放在了外部的for (int i=0; i<an;i++)循环里面,这意味着每次循环都会新建一个空数组,之前创建的对象都会被丢掉,完全达不到你要创建an个对象的目的。 - 多余的嵌套循环:内部的
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
相关产品推荐
相关产品推荐

