-
August 10th, 2011, 03:05 PM
#1
How to automate the initialization of variables
A part of my code required me to initialize n number of variables. How can it be done. For example
......
.......
XYDataset[] data;
for(int i<0;i<size;i++)
{
data[i]="data"+i;
}
for(int i=0;i<size;i++)
{
XYDataset data[i]=new XYDataset();
}
.......
I think you might understand from the example above what I want to do....I just want to have n number of instance variables of the class XYDataset initialized, so that I can then use it my code....How can I do that....I would really appreciate any help....
-
August 10th, 2011, 03:29 PM
#2
Re: How to automate the initialization of variables
I just want to have n number of instance variables of the class XYDataset initialized
I would use code like you have posted. I would add an assignment to give data a value:
data = new XYData[n]; // Set data to an array of n slots
What are you asking to be done differently?
A problem is you are redefining data in the loop:
XYDataset data[i]=new XYDataset();
A new version:
Code:
String[] data = new String[5]; // Create an array with 5 elements
for(int i= 0; i<data.length; i++) {
data[i]="data"+i; // fill the array
}
for(int i=0; i<data.length; i++) {
data[i]=new String(); // fill the array again
}
Last edited by Norm; August 10th, 2011 at 03:34 PM.
Norm
-
August 10th, 2011, 03:52 PM
#3
Re: How to automate the initialization of variables
Originally Posted by Norm
I would use code like you have posted. I would add an assignment to give data a value:
data = new XYData[n]; // Set data to an array of n slots
What are you asking to be done differently?
A problem is you are redefining data in the loop:
XYDataset data[i]=new XYDataset();
A new version:
Code:
String[] data = new String[5]; // Create an array with 5 elements
for(int i= 0; i<data.length; i++) {
data[i]="data"+i; // fill the array
}
for(int i=0; i<data.length; i++) {
data[i]=new String(); // fill the array again
}
Let me post the entire program:
public class CombinedXYPlotDemo1 extends ApplicationFrame {
/**
* Constructs a new demonstration application.
*
* @param title the frame title.
*/
public CombinedXYPlotDemo1(final String title) {
super(title);
final JFreeChart chart = createCombinedChart();
final ChartPanel panel = new ChartPanel(chart, true, true, true, false, true);
panel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(panel);
}
/**
* Creates a combined chart.
*
* @return the combined chart.
*/
private JFreeChart createCombinedChart() {
// create subplot 1...
final XYDataset data1 = createDataset1();
final XYItemRenderer renderer1 = new StandardXYItemRenderer();
final NumberAxis rangeAxis1 = new NumberAxis("Range 1");
final XYPlot subplot1 = new XYPlot(data1, null, rangeAxis1, renderer1);
subplot1.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT);
final XYTextAnnotation annotation = new XYTextAnnotation("Hello!", 50.0, 10000.0);
annotation.setFont(new Font("SansSerif", Font.PLAIN, 9));
annotation.setRotationAngle(Math.PI / 4.0);
subplot1.addAnnotation(annotation);
// create subplot 2...
final XYDataset data2 = createDataset2();
final XYItemRenderer renderer2 = new StandardXYItemRenderer();
final NumberAxis rangeAxis2 = new NumberAxis("Range 2");
rangeAxis2.setAutoRangeIncludesZero(false);
final XYPlot subplot2 = new XYPlot(data2, null, rangeAxis2, renderer2);
subplot2.setRangeAxisLocation(AxisLocation.TOP_OR_LEFT);
// parent plot...
final CombinedDomainXYPlot plot = new CombinedDomainXYPlot(new NumberAxis("Domain"));
plot.setGap(10.0);
// add the subplots...
plot.add(subplot1, 1);
plot.add(subplot2, 1);
plot.setOrientation(PlotOrientation.VERTICAL);
// return a new chart containing the overlaid plot...
return new JFreeChart("CombinedDomainXYPlot Demo",
JFreeChart.DEFAULT_TITLE_FONT, plot, true);
}
/**
* Creates a sample dataset.
*
* @return Series 1.
*/
private XYDataset createDataset1() {
// create dataset 1...
final XYSeries series1 = new XYSeries("Series 1");
series1.add(10.0, 12353.3);
series1.add(20.0, 13734.4);
series1.add(30.0, 14525.3);
series1.add(40.0, 13984.3);
series1.add(50.0, 12999.4);
series1.add(60.0, 14274.3);
series1.add(70.0, 15943.5);
series1.add(80.0, 14845.3);
series1.add(90.0, 14645.4);
series1.add(100.0, 16234.6);
series1.add(110.0, 17232.3);
series1.add(120.0, 14232.2);
series1.add(130.0, 13102.2);
series1.add(140.0, 14230.2);
series1.add(150.0, 11235.2);
final XYSeries series2 = new XYSeries("Series 2");
series2.add(10.0, 15000.3);
series2.add(20.0, 11000.4);
series2.add(30.0, 17000.3);
series2.add(40.0, 15000.3);
series2.add(50.0, 14000.4);
series2.add(60.0, 12000.3);
series2.add(70.0, 11000.5);
series2.add(80.0, 12000.3);
series2.add(90.0, 13000.4);
series2.add(100.0, 12000.6);
series2.add(110.0, 13000.3);
series2.add(120.0, 17000.2);
series2.add(130.0, 18000.2);
series2.add(140.0, 16000.2);
series2.add(150.0, 17000.2);
final XYSeriesCollection collection = new XYSeriesCollection();
collection.addSeries(series1);
collection.addSeries(series2);
return collection;
}
/**
* Creates a sample dataset.
*
* @return Series 2.
*/
private XYDataset createDataset2() {
// create dataset 2...
final XYSeries series2 = new XYSeries("Series 3");
series2.add(10.0, 16853.2);
series2.add(20.0, 19642.3);
series2.add(30.0, 18253.5);
series2.add(40.0, 15352.3);
series2.add(50.0, 13532.0);
series2.add(100.0, 12635.3);
series2.add(110.0, 13998.2);
series2.add(120.0, 11943.2);
series2.add(130.0, 16943.9);
series2.add(140.0, 17843.2);
series2.add(150.0, 16495.3);
series2.add(160.0, 17943.6);
series2.add(170.0, 18500.7);
series2.add(180.0, 19595.9);
return new XYSeriesCollection(series2);
}
// ****************************************************************************
// * JFREECHART DEVELOPER GUIDE *
// * The JFreeChart Developer Guide, written by David Gilbert, is available *
// * to purchase from Object Refinery Limited: *
// * *
// * http://www.object-refinery.com/jfreechart/guide.html *
// * *
// * Sales are used to provide funding for the JFreeChart project - please *
// * support us so that we can continue developing free software. *
// ****************************************************************************
/**
* Starting point for the demonstration application.
*
* @param args ignored.
*/
public static void main(final String[] args) {
final CombinedXYPlotDemo1 demo = new CombinedXYPlotDemo1("CombinedDomainXYPlot Demo");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
}
If u look at createDataset1(), In this as you can see there are 2 series, series1 and series2, but in my program the number of series depend on a random number, so in that case how can I automate the process, suppose if the random number is 4, then I want the initialization to be for series1,series2,series3 and series4, so that I can then fill the respective series with the dataset values to plot the graph.
-
August 10th, 2011, 04:42 PM
#4
Re: How to automate the initialization of variables
Let me post the entire code:
public class CombinedXYPlotDemo4 extends ApplicationFrame {
/**
* Constructs a new demonstration application.
*
* @param title the frame title.
*/
public CombinedXYPlotDemo4(final String title) {
super(title);
final JFreeChart chart = createCombinedChart();
final ChartPanel panel = new ChartPanel(chart, true, true, true, false, true);
panel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(panel);
}
/**
* Creates a combined chart.
*
* @return The combined chart.
*/
private JFreeChart createCombinedChart() {
// create subplot 1...
final XYDataset data1 = createDataset1();
final XYItemRenderer renderer1 = new StandardXYItemRenderer();
final NumberAxis rangeAxis1 = new NumberAxis("Range 1");
final XYPlot subplot1 = new XYPlot(data1, null, rangeAxis1, renderer1);
subplot1.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT);
// add secondary axis
subplot1.setDataset(1, createDataset2());
final NumberAxis axis2 = new NumberAxis("Range Axis 2");
axis2.setAutoRangeIncludesZero(false);
subplot1.setRangeAxis(1, axis2);
subplot1.setRangeAxisLocation(1, AxisLocation.BOTTOM_OR_RIGHT);
subplot1.setRenderer(1, new StandardXYItemRenderer());
subplot1.mapDatasetToRangeAxis(1, 1);
final XYTextAnnotation annotation = new XYTextAnnotation("Hello!", 50.0, 10000.0);
annotation.setFont(new Font("SansSerif", Font.PLAIN, 9));
annotation.setRotationAngle(Math.PI / 4.0);
subplot1.addAnnotation(annotation);
// create subplot 2...
final XYDataset data2 = createDataset2();
final XYItemRenderer renderer2 = new StandardXYItemRenderer();
final NumberAxis rangeAxis2 = new NumberAxis("Range 2");
rangeAxis2.setAutoRangeIncludesZero(false);
final XYPlot subplot2 = new XYPlot(data2, null, rangeAxis2, renderer2);
subplot2.setRangeAxisLocation(AxisLocation.TOP_OR_LEFT);
// parent plot...
final CombinedDomainXYPlot plot = new CombinedDomainXYPlot(new NumberAxis("Domain"));
plot.setGap(10.0);
// add the subplots...
plot.add(subplot1, 1);
plot.add(subplot2, 1);
plot.setOrientation(PlotOrientation.VERTICAL);
// return a new chart containing the overlaid plot...
return new JFreeChart("CombinedDomainXYPlot Demo",
JFreeChart.DEFAULT_TITLE_FONT, plot, true);
}
/**
* Creates a sample dataset.
*
* @return Series 1.
*/
private XYDataset createDataset1() {
// create dataset 1...
final XYSeries series1 = new XYSeries("Series 1a");
series1.add(10.0, 12353.3);
series1.add(20.0, 13734.4);
series1.add(30.0, 14525.3);
series1.add(40.0, 13984.3);
series1.add(50.0, 12999.4);
series1.add(60.0, 14274.3);
series1.add(70.0, 15943.5);
series1.add(80.0, 14845.3);
series1.add(90.0, 14645.4);
series1.add(100.0, 16234.6);
series1.add(110.0, 17232.3);
series1.add(120.0, 14232.2);
series1.add(130.0, 13102.2);
series1.add(140.0, 14230.2);
series1.add(150.0, 11235.2);
final XYSeries series1b = new XYSeries("Series 1b");
series1b.add(10.0, 15000.3);
series1b.add(20.0, 11000.4);
series1b.add(30.0, 17000.3);
series1b.add(40.0, 15000.3);
series1b.add(50.0, 14000.4);
series1b.add(60.0, 12000.3);
series1b.add(70.0, 11000.5);
series1b.add(80.0, 12000.3);
series1b.add(90.0, 13000.4);
series1b.add(100.0, 12000.6);
series1b.add(110.0, 13000.3);
series1b.add(120.0, 17000.2);
series1b.add(130.0, 18000.2);
series1b.add(140.0, 16000.2);
series1b.add(150.0, 17000.2);
final XYSeriesCollection collection = new XYSeriesCollection();
collection.addSeries(series1);
collection.addSeries(series1b);
return collection;
}
/**
* Creates a sample dataset.
*
* @return A sample dataset.
*/
private XYDataset createDataset2() {
// create dataset 2...
final XYSeries series2 = new XYSeries("Series 2");
series2.add(10.0, 16853.2);
series2.add(20.0, 19642.3);
series2.add(30.0, 18253.5);
series2.add(40.0, 15352.3);
series2.add(50.0, 13532.0);
series2.add(100.0, 12635.3);
series2.add(110.0, 13998.2);
series2.add(120.0, 11943.2);
series2.add(130.0, 16943.9);
series2.add(140.0, 17843.2);
series2.add(150.0, 16495.3);
series2.add(160.0, 17943.6);
series2.add(170.0, 18500.7);
series2.add(180.0, 19595.9);
return new XYSeriesCollection(series2);
}
// ****************************************************************************
// * JFREECHART DEVELOPER GUIDE *
// * The JFreeChart Developer Guide, written by David Gilbert, is available *
// * to purchase from Object Refinery Limited: *
// * *
// * http://www.object-refinery.com/jfreechart/guide.html *
// * *
// * Sales are used to provide funding for the JFreeChart project - please *
// * support us so that we can continue developing free software. *
// ****************************************************************************
/**
* Starting point for the demonstration application.
*
* @param args ignored.
*/
public static void main(final String[] args) {
final CombinedXYPlotDemo4 demo = new CombinedXYPlotDemo4("CombinedDomainXYPlot Demo");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
}
As you can see in createDataset1() and createDataset2(), they have series1 and series2 which are somewhat hard coded into the code. The output of this program will plot a graph. But for my program I would have random number of series , in order to plot the graph for random number of series, I would have to somehow automate the initialization of the instance variable "series". For example, suppose the random number is 5, then I would have series0,series1,series2,series3 and series4 initialized. But I am not sure how I can somehow automate the initialization of "series" in createDataset1() and createDataset2() for random number of series.
-
August 11th, 2011, 07:10 AM
#5
Re: How to automate the initialization of variables
automate the initialization of the instance variable "series".
Variable names are defined at compile time.
You can create new "named" variables by using a Map. The Map's key can be treated as the variable name.
Code:
String name = "series";
for(int i=0; i < nbrOfSeries; i++) {
name += i; // build new name for this one
XYSeries aSeries = new XYSeries("Series " + i); // create the instance
aSeries.add(....); // fill with data
...
theMap.put(name, aSeries); // Save the reference
}
Norm
-
August 13th, 2011, 04:48 PM
#6
Re: How to automate the initialization of variables
Originally Posted by zakhussain299
A part of my code required me to initialize n number of variables. How can it be done.
You can use an initializer. It looks like this,
Code:
public class A {
private int[] a; // array of integers
{ // an initializer (runs before any constructor)
// here you can do complex intializations of variables involving
// code such as assignments and for-loops:
a = new int[10];
for (int i=0; i<a.length(); i++) {
a[i] = i;
}
}
}
Last edited by nuzzle; August 13th, 2011 at 09:46 PM.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|