Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Jfree chart: внешний цикл мертвый.  [new]
Peshang
Member

Откуда:
Сообщений: 5
всем привет! я пытаюсь построить график через jfree chart, но мой внешний цикл не работает. и вообще график строится не правильно. помогите пожалуйста исправить код.
внес из кода только то, считал нужным.
  private static XYDataset createDataset() {
        XYSeriesCollection tsc = new XYSeriesCollection();
        double [] psi=Psi();  
        for(int D=5;D<10;D++) {
        XYSeries series = new XYSeries("D = "+D);
            for ( F=F_Starting_Value, j=0;F<F_End_Value && j<MatrixSize;
            	F+=((double)Math.round(F_Step*1000d)/1000d), j++)
            	{
            	Zclassic_D1 [j]=((double)Math.round(F*1000d)/1000d)/((D-1)*
        	    (1-((double)Math.round(F*1000d)/1000d))+1);
        		ZFEC_D1 [j]=(A*psi[j])/( (1-psi[j])*(D-1)+ B);
        		Z_D1[j]= ((double)Math.round(ZFEC_D1[j]*1000000000d)/1000000000d)-
        		((double)Math.round(Zclassic_D1[j]*1000000000d)/1000000000d);
        		
        		if (Z_D1[j]>0)
        			{
        			series.add( Z_D1[j],D);
        			}
            	}
            	tsc.addSeries(series);
        }
        return tsc;
    }

    private static JFreeChart createChart(final XYDataset dataset) {
        JFreeChart chart = ChartFactory.createTimeSeriesChart(
            "Test", "D", "Z", dataset, true, true, false);
        return chart;
    }
2 окт 19, 10:34    [21984600]     Ответить | Цитировать Сообщить модератору
 Re: Jfree chart: внешний цикл мертвый.  [new]
Lelouch
Member

Откуда: Москва
Сообщений: 1782
Peshang,

Я бы на вашем месте начал отсюда https://www.oracle.com/technetwork/java/codeconventions-150003.pdf
+ Код приведен не полностью, не понятно, что такое F и MatrixSize.
2 окт 19, 12:08    [21984712]     Ответить | Цитировать Сообщить модератору
 Re: Jfree chart: внешний цикл мертвый.  [new]
mayton
Member

Откуда: loopback
Сообщений: 42452
Peshang
всем привет! я пытаюсь построить график через jfree chart, но мой внешний цикл не работает. и вообще график строится не правильно. помогите пожалуйста исправить код.
внес из кода только то, считал нужным.

Почему ты решил что внешний цикл не работает? Нужно какое-то доказательство. Скрин с дебаггером например.

Видишь-ли. Ты исходник привел не полный. А огрызок. Поэтому чтобы участники сымитировали твою
"нерабочесть" им надо потратить какие-то усилия. Поэтому будь любезен постарайся добавить какие-то
точки логгирования чтобы определить докудова ты доходишь.

 for(int D=5;D<10;D++) {
        System.out.println(":: Checkpoint #1");
        XYSeries series = new XYSeries("D = "+D);
2 окт 19, 12:33    [21984742]     Ответить | Цитировать Сообщить модератору
 Re: Jfree chart: внешний цикл мертвый.  [new]
Peshang
Member

Откуда:
Сообщений: 5
Спасибо за быстрый ответ! добавлю полный код, я точно знаю выходной график не правильный.
я очень плохо разбираюсь в программировании, просто нужно исследовать полученные графики.
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import org.jfree.chart.*;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

public class ChartPanelTest {
	
    public static int A=1, B=A+1;
  //Fr=1
  public static double F; 
  public static double F_Starting_Value=(double)Math.round(0.009   *1000d)/1000d;
  public static double F_End_Value=((double)Math.round(1.0   *10d)/10d);
  public static double F_Step=((double)Math.round(0.001      *1000d)/1000d);
  public static int MatrixSize=1000;
  public static double [] Zclassic_D1 = new double [MatrixSize];
  public static double [] Zclassic_D2 = new double [MatrixSize];
  public static double [] Zclassic_D3 = new double [MatrixSize];
  public static double [] ZFEC_D1 = new double [MatrixSize];
  public static double [] ZFEC_D2 = new double [MatrixSize];
  public static double [] ZFEC_D3 = new double [MatrixSize];
  public static double [] Z_D1 = new double [MatrixSize];
  public static double [] Z_D2 = new double [MatrixSize];
  public static double [] Z_D3 = new double [MatrixSize];
//Расчет Фактериалов B и A/
public static int Facterial(int n) 
{
	int temp=1, fact=1;
	for(int i=n; i>0;i--) {
	temp=i*fact;;
	fact=temp;
	}
	
	return fact;
}
//Расчет Пси
public static double []Psi()
{
	double []temp = new double [MatrixSize]; 
	double [] p = new double [MatrixSize];
	int j;
	//==========Изменение точности=============
	 for ( F=((double)Math.round(F_Starting_Value*1000d)/1000d),j=0;
			 F < ((double)Math.round(F_End_Value*1000d)/1000d) && j<MatrixSize;
			 F+=((double)Math.round(F_Step*1000d)/1000d), j++)
	{
		for (int i= A; i<= B; i++) 
		{
		temp[j]=0;
			temp [j]= Math.pow(((double)Math.round(F*1000d)/1000d), i)
				*Math.pow(1-((double)Math.round(F*1000d)/1000d),B-i)
				*((Facterial(B))/(Facterial(B-i)*Facterial(i)));
		
				p[j] += ((double)Math.round(temp [j]*1000000000d)/1000000000d);
		}
	}
	return p;
}
//======================================End of Calculations==========================
//Charts creation
    private static XYDataset createDataset() {
        XYSeriesCollection tsc = new XYSeriesCollection();
        double [] psi=Psi();  
        int j;
        for(int D=5;D<10;D++) {
        XYSeries series = new XYSeries("D = "+D);
            for ( F=F_Starting_Value, j=0;F<F_End_Value && j<MatrixSize;
            	F+=((double)Math.round(F_Step*1000d)/1000d), j++)
            	{
            	Zclassic_D1 [j]=((double)Math.round(F*1000d)/1000d)/((D-1)*
        	    (1-((double)Math.round(F*1000d)/1000d))+1);
        		ZFEC_D1 [j]=(A*psi[j])/( (1-psi[j])*(D-1)+ B);
        		Z_D1[j]= ((double)Math.round(ZFEC_D1[j]*1000000000d)/1000000000d)-
        		((double)Math.round(Zclassic_D1[j]*1000000000d)/1000000000d);
        		
        		if (Z_D1[j]>0)
        			{
        			series.add( Z_D1[j],D);
        			}
            	}
            	tsc.addSeries(series);
        }
        return tsc;
    }

    private static JFreeChart createChart(final XYDataset dataset) {
        JFreeChart chart = ChartFactory.createTimeSeriesChart(
            "Test", "D", "Z", dataset, true, true, false);
        return chart;
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame f = new JFrame();
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                XYDataset dataset = createDataset();
                JFreeChart chart = createChart(dataset);
                final XYPlot plot = chart.getXYPlot();
                ChartPanel chartPanel = new ChartPanel(chart) {
                    @Override
                    public Dimension getPreferredSize() {
                        return new Dimension(450, 450);
                    }
                };
                f.add(chartPanel);
                JPanel p = new JPanel();
                p.add(new JButton(new AbstractAction("New") {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        plot.setDataset(createDataset());
                    }
                }));
                f.add(p, BorderLayout.SOUTH);
                f.pack();
                f.setLocationRelativeTo(null);
                f.setVisible(true);
            }
        });
    }
}
2 окт 19, 15:27    [21985044]     Ответить | Цитировать Сообщить модератору
 Re: Jfree chart: внешний цикл мертвый.  [new]
mayton
Member

Откуда: loopback
Сообщений: 42452
Капец у тебя code-style. Паскалист што-ли...
2 окт 19, 15:29    [21985045]     Ответить | Цитировать Сообщить модератору
 Re: Jfree chart: внешний цикл мертвый.  [new]
Peshang
Member

Откуда:
Сообщений: 5
mayton, проверил все циклы. работают, но график не правильный. пока ищу ошибку в графике!
2 окт 19, 15:41    [21985058]     Ответить | Цитировать Сообщить модератору
 Re: Jfree chart: внешний цикл мертвый.  [new]
mayton
Member

Откуда: loopback
Сообщений: 42452
Извини. У нас нет критерия правильности для твоих графиков. Так уж вышло.
2 окт 19, 15:43    [21985064]     Ответить | Цитировать Сообщить модератору
 Re: Jfree chart: внешний цикл мертвый.  [new]
Peshang
Member

Откуда:
Сообщений: 5
mayton, знаю все ужасно, я не программист, кажется проблема вот в чем
JFreeChart chart = ChartFactory.createTimeSeriesChart(
            "Test", "D", "Z", dataset, true, true, false);
!! надо вместо Таймсерис поставить просто линию, но как не знаю, у меня данные не связаны со временем!
2 окт 19, 15:50    [21985073]     Ответить | Цитировать Сообщить модератору
 Re: Jfree chart: внешний цикл мертвый.  [new]
Lelouch
Member

Откуда: Москва
Сообщений: 1782
Peshang,

http://www.jfree.org/jfreechart/api/javadoc/org/jfree/chart/ChartFactory.html#createXYLineChart-java.lang.String-java.lang.String-java.lang.String-org.jfree.data.xy.XYDataset-
2 окт 19, 18:49    [21985314]     Ответить | Цитировать Сообщить модератору
 Re: Jfree chart: внешний цикл мертвый.  [new]
Peshang
Member

Откуда:
Сообщений: 5
Lelouch, Спасибо, разберусь!
3 окт 19, 17:03    [21986067]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить