Nierowna dlugosc list

Odpowiedz Nowy wątek
2014-12-30 23:17
java52625989842
0

Mam taki blad

Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 3684, Size: 3684
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at rozniczkowanie.Wykres.createDataset(Wykres.java:81)
at rozniczkowanie.Rozniczkowanie.rozniczka(Rozniczkowanie.java:154)

Dlatego, ze chce do jednej tablicy wrzucic 2 listy, ktore maja rozna dlugosc. Znalazlem cos takiego jak subList(index, index), ale nie wiem za bardzo jak tego uzyc.

Lista_dluzsza.subList( ?, lista_krotsza.size())?

Pozostało 580 znaków

2014-12-30 23:22
0

Problemem nie jest wrzucanie czegoś do listy, tylko pobieranie z listy nieistniejącego elementu (widać w stack trace, że wyjątek rzuca metoda get). Tablica taka jak Twoja o 3684 elementach ma elementy o indeksach od 0 do 3683, czyli o jeden mniej niż Ty pobierasz.

Nie bardzo rozumiem co Ty z tymi listami próbujesz zrobić szczerze powiedziawszy.

edytowany 1x, ostatnio: airborn, 2014-12-30 23:23

Pozostało 580 znaków

2014-12-30 23:24
java52625989842
0

czyli w jaki sposob moge to rozwiazac?

Pozostało 580 znaków

2014-12-30 23:36
0

Ale co chcesz rozwiązać?
Usunąć błąd?
Nie odwołuj się do indeksu spoza rozmiaru tablicy (pewnie gdzieś ustawiłeś wartość jakiegoś licznika o 1 za dużo)

Dodać do jednej listy dwie listy o różnych długościach?

List<T> list = new ArrayList<>();
lista.addAll(longerList);
lista.addAll(shorterList);

Pozostało 580 znaków

2014-12-30 23:42
java52625989842
0

chce wykorzystać do tego (wiem, ze pewnie tak sie nie pisze, ale nie wiem jak dodac listy do dataCreate

   public static XYDataset createDataset(ArrayList <Double> lista1, ArrayList <Double> lista2) {
 
        DefaultXYDataset ds = new DefaultXYDataset();
 
        double[][] data = new double[2][]; 
        double[] daneX = new double[lista.size()];
        double[] daneY = new double[lista2.size()]; 
 
        for (int i = 0; i < lista.size(); ++i) {
            daneX[i] = (double) lista.get(i);
            daneY[i] = (double)lista2.get(i);
        }
 
        data[0] = daneX;
        data[1] = daneY;
 
        ds.addSeries("series1", data);
 
        return ds;
    }
edytowany 2x, ostatnio: bogdans, 2016-12-13 18:26

Pozostało 580 znaków

2014-12-30 23:42
0

Wstaw kod. Indeksy są liczone od zera, więc jak chcesz uzyskać np. ostatni element listy to musisz zrobić lista.get(lista.length - 1). Strzelam, że masz tam jakąś pętle z warunkiem i <= lista.length.

Edit: Zły timing miałem :p Skoro listy są różnych długości to nie możesz używać jednego licznika w pętli. Użyj dwóch, chociaż można to zrobić oczywiście lepiej :)

edytowany 1x, ostatnio: Wizzie, 2014-12-30 23:47

Pozostało 580 znaków

2014-12-30 23:53
java52625989842
0

jak uzywam dwoch:

public static XYDataset createDataset(ArrayList <double> lista1, ArrayList <double> lista2) {
 
        DefaultXYDataset ds = new DefaultXYDataset();
 
        double[][] data = new double[2][]; 
        double[] daneX = new double[lista.size()];
        double[] daneY = new double[lista2.size()]; 
 
        for (int i = 0; i < lista.size(); ++i) {
            daneX[i] = (double) lista.get(i);
 
        }
        for (int i = 0; i < lista2.size(); ++i) {
 
            daneY[i] = (double)lista2.get(i);
        }
 
        data[0] = daneX;
        data[1] = daneY;
 
        ds.addSeries("series1", data);
 
        return ds;
    }

to mam blad:
ception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: The 'data' array must contain two arrays with equal length.
at org.jfree.data.xy.DefaultXYDataset.addSeries(DefaultXYDataset.java:272)

edytowany 1x, ostatnio: bogdans, 2016-12-13 18:26

Pozostało 580 znaków

2014-12-31 00:11
0

Rozumiem, że chcesz osiągnąć, żeby tablica data miała nie równe rozmiary. Dla przykładu jedna lista ma rozmiar 5 druga 10 to indeksy mają dla data[0] wynosić tutaj max 5 (ostatni element data[0][5]) dla data[1] max 10 (ostatni element data[1][10])...Tablica musi być kwadratowa.

edytowany 2x, ostatnio: MoorfoxD, 2014-12-31 00:11

Pozostało 580 znaków

2014-12-31 00:15
java52625989842
0

No wlanie chyba musi byc kwardratowa bo nie wyrysuje wykresu, tylko ona sie rozni o jakies 50 indeksow i chyba musze jakos zrobic tak, zeby usuwalo te indeksy, ktorych jest nadmiar (?) tylko nie wiem jak mam to zrobic, bardzo prosze zeby ktos napisal kod, ktory musze gdzies wstawic.

Pozostało 580 znaków

2014-12-31 00:19
0

teraz masz błąd w linii
ds.addSeries("series1", data);
gdzie parametr data musi mieć dwie tablice o identycznych rozmiarach "The 'data' array must contain two arrays with equal length"
Podaj definicję parametrów funkcji "addSeries"

no chyba nie - MoorfoxD 2014-12-31 00:25

Pozostało 580 znaków

2014-12-31 00:25
java52625989842
0

addSeries(null, double [] [] data)

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