Nierowna dlugosc list

Nierowna dlugosc list
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())?

airborn
  • Rejestracja:ponad 15 lat
  • Ostatnio:prawie 7 lat
  • Postów:274
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
0

czyli w jaki sposob moge to rozwiazac?

airborn
  • Rejestracja:ponad 15 lat
  • Ostatnio:prawie 7 lat
  • Postów:274
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?

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

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

Kopiuj
   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
Wizzie
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 7 lat
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
0

jak uzywam dwoch:

Kopiuj
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
MD
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:280
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
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.

L2
  • Rejestracja:około 10 lat
  • Ostatnio:ponad 6 lat
  • Lokalizacja:Rybnik
  • Postów:4
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"

MD
0

addSeries(null, double [] [] data)

MD
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:280
0

Może powiedz lepiej co to ma robić, to ma być coś w stylu (napisałem z nudów, żeby coś napisać)
Na pewno są błędny pisane w notatniku ;d

Kopiuj
public class Punkt {
private double x;
private double y;

    void setX(double x)
    { this.x = x;}
    void setY(double y)
    {  this.y = y;}
}


     public Punkt[] funkcja(ArrayList <double> lista1, ArrayList <double> lista2)
      {
            int i = 0;
            Punkt[] punkty = new Punkt[lista.size()>lista2.size() ? lista2.size() : lista.size()];
            for(Punkt p : punkty)
            {
            p.setX(lista[i]);
            p.setY(lista2[i]);
            i++;
            }
          return punkty;
      }
 
edytowany 2x, ostatnio: MoorfoxD
L2
  • Rejestracja:około 10 lat
  • Ostatnio:ponad 6 lat
  • Lokalizacja:Rybnik
  • Postów:4
0

data w obu wierszach musi mieć taki sam rozmiar

Kopiuj
 
    addSeries

    public void addSeries(java.lang.Comparable seriesKey,
                          double[][] data)

    Adds a series or if a series with the same key already exists replaces the data for that series, then sends a DatasetChangeEvent to all registered listeners.

    Parameters:
        seriesKey - the series key (null not permitted).
        data - the data (must be an array with length 2, **containing two arrays of equal length,** the first containing the x-values and the second containing the y-values).

Moe podaj przykładowe dane które masz i czemu się różnią? Każdemu X pierwszego wiersza musi odpowiadać Y z drugiego.

edytowany 1x, ostatnio: bogdans
0

moze ja wkleje caly kod:

Kopiuj
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package wykres;

import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartMouseEvent;
import org.jfree.chart.ChartMouseListener;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.event.ChartChangeListener;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.DefaultXYDataset;
import org.jfree.data.xy.XYDataset;

/**
 *
 * @author 
 */
public class Wykres 

{
      public static void rysuj() {

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame frame = new JFrame("Charts");

                frame.setSize(600, 400);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);

                XYDataset ds = createDataset();
                JFreeChart chart = ChartFactory.createXYLineChart("Wykres",
                        "x", "y", ds, PlotOrientation.VERTICAL, true, true,
                        false);
                chart.addChangeListener((ChartChangeListener) chart);

                
                ChartPanel cp = new ChartPanel(chart);
              

                frame.getContentPane().add(cp);
            }

            private XYDataset createDataset() {
                throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
            }
        });

    }

   public static XYDataset createDataset(ArrayList <Double> lista, 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;
    }


}


    

ma narysowac wykres i musi sie dac pozniej klikac na niego i odczytac X i Y, wiem ze mozna zrobic getX() i getY(), ale to odczytuje pozycje na calym panelu, a nie faktyczne wartosci z wykresu

edytowany 1x, ostatnio: bogdans
MD
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:280
0

Wykres to nic innego jak zbiór punktów, jest tyle samo X co Y. A twoje listy mają mieć różne długości ? Jeżeli tak podałem ci chyba dobry kod, który stworzy tablicę Punktów i będzie tyle X i Y co wynosi rozmiar krótszej listy... po tym przepisze wartości X i Y do tablicy punktów

edytowany 2x, ostatnio: MoorfoxD
0

p.setX(lista.get(i)); //object connot converte to double

MD
Porobiłem tam błędy zmień argument z lista1 na lista no i ArrayList<Double> i powinno być dobrze
0

i w jaki sposob mam te punkty polaczyc z createdataBase? przepraszam, ze tak mecze ale nie jestem programista i idzie mi to strasznie opornie

MD
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:280
1
Kopiuj
 
    public Punkt[] funkcja(ArrayList<Double> lista, ArrayList <Double> lista2)
    {
        Punkt[] punkty = new Punkt[lista.size()>lista2.size() ? lista2.size() : lista.size()];
        for(int i = 0;i<punkty.length;i++)
        {
            punkty[i] = new Punkt();
            punkty[i].setX(lista.get(i));
            punkty[i].setY(lista2.get(i));
        }
        return punkty;
    }

Masz poprawione działające.

0

Dzięki wielkie za pomoc!

0

Niestety, ale klasa punkt jest "Punkt []", a ja potrzebuje stworzyc data [][], jednowymiarowa nieprzejdzie

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)