Błąd typu ArrayIndexOutOfBoundsException podczas operacji na tablicy

0

Witam wszystko sprawdzilem 2 razy mimo wszystko co ktores odpalenie programu wywala mi
exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7 at cw5.main(cw5.java:32)
ew linie sie roznia, prosze o pomoc juz zglupialem. Blad wyskakuje kiedy dostepne sa jeszcze dalsze zmienne tablicy O.o
oto "kot":

import java.util.Random;
public class cw5 {
public static void main(String[] args) {
Random r = new Random();
int a=r.nextInt(9)+1,b=r.nextInt(9)+1,c=r.nextInt(9)+1;
int[] a1= new int[a];
int[] b1= new int[b];
int[] c1= new int[c];
for(int i=0;i<a1.length;i++) a1[i]=r.nextInt(10);
for(int i=0;i<b1.length;i++) b1[i]=r.nextInt(10);
for(int i=0;i<c1.length;i++) c1[i]=r.nextInt(10);
int najw=a1.length-1;
if(a1.length<b1.length) najw=b1.length;
else if(a1.length<c1.length) najw=c1.length;
int[][] tabk = new int[najw][3];
System.out.println(a1.length +" "+ b1.length +" "+ c1.length +" "+ najw);
for(int i=0;i<a1.length;i++)
{
	System.out.print(i +" = "+ a1[i] +" |");
	tabk[i][0]=a1[i];
}
System.out.println();
for(int i=0;i<b1.length;i++)
{
	System.out.print(i +" = "+ b1[i] +" |");
	tabk[i][1]=b1[i];
}
System.out.println();
for(int i=0;i<c1.length;i++)
{
	System.out.print(i +" = "+ c1[i] +" |");
	tabk[i][2]=c1[i];
}
System.out.println();
for(int j=0;j<a1.length;j++){
System.out.print(tabk[j][0] +" ");
}
System.out.println();
for(int j=0;j<b1.length;j++){
System.out.print(tabk[j][1] +" ");
}
System.out.println();
for(int j=0;j<c1.length;j++){
System.out.print(tabk[j][2] +" ");
}
System.out.println();


}}

 

Wiem, ze wypisuje wszystko 2 razy ale staralem sie namierzyc kiedy to sie dzieje, tutaj blad:
user image

3

To się dzieje, gdy a1 jest największą tablicą, bo:

int najw=a1.length-1;
...
for(int i=0;i<a1.length;i++)
{
    System.out.print(i +" = "+ a1[i] +" |");
    tabk[i][0]=a1[i];
}

Poza tym Twój "algorytm" szukania maksimum z 3 liczb jest mocno ułomny, a konkretnie dla przypadku a < b < c zwróci b jako max.

0

rzeczywiscie moj "algorytm" mial wygladac nieco inaczej ;) az mi wstyd ale ucze sie dzisiaj od 9 rano to jest jakies wytlumaczenie :P byl jednak jeszcze jeden blad mianowicie nie

int najw=a1.length;
if(najw<b1.length) najw=b1.length;
else if(najw<c1.length) najw=c1.length;

tylko

int najw=a1.length;
if(najw<b1.length) najw=b1.length;
if(najw<c1.length) najw=c1.length;

Dzieki wielkie za wszystkie podpowiedzi;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1