To David

A discussion forum for JFreeChart (a 2D chart library for the Java platform).
Locked
Fumitada...

To David

Post by Fumitada... » Wed Nov 07, 2001 2:45 am

To David.

I've made a simple class that instanciates Object[][][](used in XYDataSource), because some people here get cofused with multi-dimensional array.

if you code like below that u used to or u r doing now,
Double[][][] data_array = new Double[][][] { { { new Double(1.0), new Double(5.6) },
{ new Double(2.0), new Double(3.5) },
{ new Double(3.0), new Double(2.4) },
{ new Double(4.0), new Double(4.3) },
{ new Double(5.0), new Double(1.3) } } };

you can code like below with my classes.

Make3DimObject m3d = new Make3DimObject();
Series s = new Series();
s.addPair(new Double(2.0), new Double(3.5));
s.addPair(new Double(3.0), new Double(2.4));
s.addPair(new Double(4.0), new Double(4.3));
s.addPair(new Double(5.0), new Double(1.3));
m3d.addSeries(s);
Object[][][] data = m3d.make();

Now u got the Object !

if you have 2 series, just simply make 2 Series classes and add those to Make3DimObject.

Make3DimObject m3d = new Make3DimObject();
Series s1 = new Series();
s1.addPair(new Double(2.0), new Double(3.5));
s1.addPair(new Double(3.0), new Double(2.4));
s1.addPair(new Double(4.0), new Double(4.3));
s1.addPair(new Double(5.0), new Double(1.3));
m3d.addSeries(s1);
Series s2 = new Series();
s2.addPair(new Double(1.3), new Double(4.5));
s2.addPair(new Double(2.1), new Double(2.6));
s2.addPair(new Double(3.2), new Double(1.5));
s2.addPair(new Double(4.0), new Double(3.2));
m3d.addSeries(s2);
Object[][][] data = m3d.make();

Why I made this class is so easy to make Object[][][] with DataBase.

ResultSet rs = stmt.executeQuery("...");
Series s = new Series();
while(rs.next()){
s.addPair(rs.get... , rs.get....);
}
Make3DimObject m3d = new Make3DimObject();
m3d.addSeries(s);
Object[][][] data = m3d.make();

David, if this class is just a crap, please delete this thread...
I don't wanna shame on my code. ;)

Finally, the code is below...

import java.util.*;

class Make3DimObject{
Object[][][] data;
Vector vec = null;

public Make3DimObject(){
vec = new Vector();
}

public void addSeries(Series s){
vec.add(s);
}

public Object[][][] make(){
int sizeOfSeries = vec.size();
int maxSizeOfPairs = 0;

for (Enumeration e = vec.elements() ; e.hasMoreElements() ;) {
int tmp = ((Series)e.nextElement()).getPairSize();
if(maxSizeOfPairs < tmp )
maxSizeOfPairs = tmp;
}

data = new Object[sizeOfSeries][maxSizeOfPairs][2];

for(int i = 0 ; i < sizeOfSeries ; i++){
Series s = (Series)vec.get(i);

for(int k = 0 ; k < s.getPairSize() ; k++){
Pair p = s.getPair(k);
data[k][0] = p.getPair1();
data[k][1] = p.getPair2();
}
}
return data;

}
}

class Pair{
private Object pair1 = null;
private Object pair2 = null;

public Pair(Object pair1, Object pair2){
this.pair1 = pair1;
this.pair2 = pair2;
}


public Object getPair1(){
return this.pair1;
}

public Object getPair2(){
return this.pair2;
}
}

class Series{
Vector vec = null;

public Series(){
vec = new Vector();
}

public void addPair(Object pair1, Object pair2){
vec.add( new Pair(pair1,pair2) );
}

public int getPairSize(){
return vec.size();
}

public Vector getPairs(){
return vec;
}

public Pair getPair(int index){
return (Pair)vec.get(index);
}
}

David Gilbert

RE: To David

Post by David Gilbert » Wed Nov 07, 2001 3:04 pm

Hi,

Thanks for posting your code!

One improvement you could make is to extend Make3DimObject so that it implements the XYDataSource interface directly. Then you could avoid the need to create the three dimensional array at all...and then you could rename your class NewImprovedDefaultXYDataSource or something like that...

Regards,

DG.

Locked