JFreeChart - czytanie danych do dataset

0

Cześć wszystkim!

Swoją przygodę z Javą zacząłem ok 3 tygodni temu. Czytam książki, oglądam Tutoriale ale chyba najlepszą formą nauki pozostaje "próba" stworzenia czegoś własnego.
Postanowiłem spróbować sił i napisać coś co pobierze dane z pliku i wyświetli wykres.
Wszystko szło dobrze do tej pory jednak pojawił się problem z czytaniem danych z pliku - pewnie problem jest śmiesznie prosty ale na obecnym etapie nie potrafię sobie z nim poradzić.

A więc do rzeczy. Oto kod który posiadam:

 

import java.awt.BorderLayout;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JPanel;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;


class Cena 
{
	String csvFile = "C:\\EURUSD.csv";
	BufferedReader br = null;
	String line = "";
	String csvSplitBy = ",";
	DefaultCategoryDataset dataset = new DefaultCategoryDataset();
	
	
	
	DefaultCategoryDataset czytajCene(){
		try{
			br = new BufferedReader(new FileReader (csvFile));
			while ((line = br.readLine()) != null)
			{
				String[] price = line.split(csvSplitBy);
				String[] rok = {"2010", "2011", "2012", "2013", "2014"};
				double[]priceDouble = new double[price.length];
				
				
				
				for (int i = 0; i < price.length; i++)
				{
					priceDouble[i] = Double.parseDouble(price[i]);
					dataset.addValue(priceDouble[i], "cena", rok[i]);
				}
				
			}
		} 
		catch (FileNotFoundException e)
		{
			e.printStackTrace();
		} 
		catch (IOException f)
		{
			f.printStackTrace();
		}
		finally
		{
		if (br != null)
		{
			try
			{
				br.close();
			}
			catch (IOException g)
			{
				g.printStackTrace();
			}
		}
		}
		return dataset;
	}

public static class Gielda {

	public static void main(String[] args) throws FileNotFoundException 
	{
		Cena cena = new Cena();
		JFreeChart chart = ChartFactory.createBarChart("EURUSD", "X-label", "Y-label", cena.czytajCene(), PlotOrientation.VERTICAL, false, true, false);
		ChartFrame frame1 = new ChartFrame("XYArea Chart", chart);
		frame1.setVisible(true);
		frame1.setSize(500, 400);
	}
}
}

Wykres wyświetla się prawidłowo jeśli plik na dysku (C:\EURUSD.csv) ma postać:

1.33930,1.43860,1.33870,1.33940,1.33960,

natomiast jeśli ma postać:

1.33930,
1.43860,
1.33870,
1.33940,
1.33960,

to pokazuje się tylko jeden słupek z ostatnią wartością 1.33960

Czy może mi ktoś wyjaśnić jak poradzić sobie z tym problemem?
Jaką modyfikację trzeba wprowadzić aby wartości widoczne w pliku w formie słupka były czytane poprawnie?

Dziękuję bardzo za podpowiedzi,
Kamil

0

Za każdym razem, gdy wczytujesz kolejną linię, jest ona dzielona w linii:

 String[] price = line.split(csvSplitBy);

Po czym wprowadzasz dane do tabeli, korzystając z for:

 for (int i = 0; i < price.length; i++)

Ale w tym drugim przypadku price.length będzie równe 1, bo tylko jeden element wczytałeś z danej linii. Oznacza to, że i zawsze będzie równe 0, a więc w linii:

dataset.addValue(priceDouble[i], "cena", rok[i]);

W miejscu rok[i] zawsze będzie podawany ten sam rok.

0

Dziękuję Ci bardzo za przybliżenie problemu.

Poświęciłbyś chwilkę swojego czasu i napisałbyś kod którym rozwiązałbyś ten problem? Byłbym bardzo wdzięczny!

Dzieki
Kamil

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