How to automate the initialization of variables
CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 6 of 6

Thread: How to automate the initialization of variables

  1. #1
    Join Date
    Aug 2011
    Posts
    3

    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....

  2. #2
    Join Date
    Jun 1999
    Location
    SW Missouri
    Posts
    3,426

    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

  3. #3
    Join Date
    Aug 2011
    Posts
    3

    Re: How to automate the initialization of variables

    Quote Originally Posted by Norm View Post
    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.

  4. #4
    Join Date
    Aug 2011
    Posts
    3

    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.

  5. #5
    Join Date
    Jun 1999
    Location
    SW Missouri
    Posts
    3,426

    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

  6. #6
    Join Date
    May 2009
    Posts
    2,413

    Re: How to automate the initialization of variables

    Quote Originally Posted by zakhussain299 View Post
    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
  •  


Azure Activities Information Page

Windows Mobile Development Center


Click Here to Expand Forum to Full Width

This is a CodeGuru survey question.


Featured


HTML5 Development Center