Błędny rozmiar tablicy przy użyciu klasy Random

Odpowiedz Nowy wątek
2011-08-06 17:03
0

Mam taki program:

package pl.java.moj_pakiet;
 
import java.util.Random;
 
public class Tab {
 
    public static void main(String[] args) {
        Random rand = new Random();
 
        int tab[][] = new int [rand.nextInt() % 10 + 1][];
        for (int i = 0; i < tab.length; i++)
            tab[i] = new int [rand.nextInt() % 10 + 1];
 
        Tab go = new Tab();
 
        go.Wprowadz(tab);
 
        int tab2[][] = new int [tab.length][go.Max(tab)];
 
        go.Wypelnij(tab, tab2);
 
        go.Wyswietl(tab2);
 
    }
 
    public void Wprowadz(int t[][])
    {
            Random rn = new Random();
 
            int i, j;
            int n = t.length;
            for (i = 0; i < n; i++)
            {
                int m = t[i].length;
                for (j = 0; j < m; j++)
                    t[i][j] = rn.nextInt() % 100;
            }
    }
 
    public void Wypelnij(int t1[][], int t2[][])
    {
        for (int i = 0; i < t1.length; i++)
        {
            for (int j = 0; j < t1[i].length; j++)
                t2[i][j] = t1[i][j];
 
            for (int j = t1[i].length; j < Max(t1); j++)
                t2[i][j] = -5;
        }
    }
 
    public void Wyswietl(int t[][])
    {
        for (int i = 0; i < t.length; i++)
        {
            for (int j = 0; j < t[i].length; j++)
                System.out.print(t[i][j] + "\t");
 
            System.out.println();
        }
 
    }
 
    public int Max(int t[][])
    {
        int max = 0;
        for (int i = 0; i < t.length; i++)
            if (max < t[i].length)
                max = t[i].length;
 
        return max;
    }
}

Kompilator wywala takie coś:

Exception in thread "main" java.lang.NegativeArraySizeException
    at pl.java.moj_pakiet.Tab.main(Tab.java:12)

Chodzi o linijkę

for (int i = 0; i < tab.length; i++)
            tab[i] = new int [rand.nextInt() % 10 + 1];

Czemu taki error?

edytowany 1x, ostatnio: michal_2, 2011-08-06 17:03

Pozostało 580 znaków

2011-08-06 17:08

Random.nextInt może wyprodukować liczbę ujemną jak widać. Zamiast nextInt() % liczba użyj nextInt(liczba).


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit, 2011-08-06 17:10

Pozostało 580 znaków

2011-08-06 17:09
0

Dzięki

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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