Question:
I have few problems with the following code:
abstract class AbstractGraph extends java.awt.Frame { static int HighValue,LowValue,ArraySize; static String InstancesArray[][] = new String [20][ArraySize]; float ReturnArray(String name) { … } static void AddArray(String name,float array[]) { … } }The InstancesArray holds a name and values of arrays created by a given user.
My first problem is that I could not access the variable ArraySize from a different class. I had to make it static first; only then was I able to assign a value to it from other function.
But then the array created did not have these dimensions; instead, it gave me exceptions when I tried to input something into the array.
I also can’t for some reason return an array from the ReturnArray method.
Also, I don’t understand why I had to make the method AddArray static to be able to do what it is supposed to do (add name and values of arrays created by a user to the InstancesArray).
Answer:
If I understand your application, you want to maintain an array ofbindings between names (represented as Strings) and associated arrays offloating point numbers.
If I’m correct, your initial declaration of instanceArray:
String instancesArray[] …is not correct, because it declares a two-dimensional array of Strings.
Instead, instancesArray should be declared as an array of Bindings:
private Binding instancesArray[];A Binding object holds a String and an associated array of floats. It alsoprovides some useful constructors. For example:
class Binding { public String name; public float[] values; public Binding() { name = new String(“void”); values = new float[0]; } public Binding(String s) { name = s; values = new float[0]; } public Binding(String s, float[] nums) { name = s; values = nums; }}In this case, here’s what your returnArray method might look like:
public float[] returnArray(String name) { for(int i = 0; i Your next problem seems to be lack of a constructor. Of course you won’tbe able to instantiate your AbstractGraph class as long as it’s declaredabstract (I assume you had good reason to do this), so your constructorwill appear in a derived class.To simplify things, I declared Graph as a concrete class. Myconstructor allows users to specify the length of instancesGraph:
class Graph { private int arraySize, graphSize private Binding instancesArray[]; public Graph(int gs) { graphSize = gs; instancesArray = new Binding[gs]; for(int i = 0; i My addArray is pretty kludgy. It looks for the next available space ininstancesArray and modifies the binding there. You can probably think of100 better ways to do this:public void addArray(String name, float[] array) { int next = -1; for(int i = 0; i -1) { instanceArray.name = name; instanceArray.values = array; } }}Finally, main() constructs a graph g, and starts adding bindings to it:public Main { public static void main() { Graph g = new Graph(20); float[] vals = new float[3] = {100, 200, 300}; g.addBinding(“first”, vals); … }}Without declaring and initializing instances of the Graph class, only thegraph class itself exists as an object. The only members of a class objectare those declared static.