user2486202
user2486202

Reputation: 13

Dynamically creating objects using a for loop

I'm relatively new to Java and trying to create an application to help with my trading. I have a method to read a csv file that I input, which is table with x number of rows and 3 columns. It reads it as multidimensional String array (String[][]) Eg

Pair----- Buy Price ---Sell Price
AUDUSD 0.9550 --- 0.9386
EURUSD 1.3333 --- 1.3050
GBPUSD 1.5705 --- 1.5550

(please excuse my formatting)

I have a constructor called ForexPair that looks like this:

public class ForexPair extends PriceWarning{

public String pairName;
public double buyPrice;
public double sellPrice;

public ForexPair(String pair, String buy, String sell) {
    pairName = pair;
    buyPrice = Double.valueOf(buy);
    sellPrice = Double.valueOf(sell);
}

My question is this: Can I use a 'for' loop to create an object for each row in my CSV file? I believe I can use an ArrayList for this. However I want the name of each object I create to be the Pair Name in the first column of my csv file. For example:

ForexPair AUDUSD = new ForexPair(pairNames[0], (myArray[0][1]),(myArray[0][2]));

But how do I create the object called AUDUSD using a for loop? So that each object has a different name?

Currently I have this code:

public static void main(String[] args) {

    String[][] myArray = getInputArray();
    String[] pairNames = new String[myArray.length];

    for(int i = 0; i < pairNames.length; i++){
        pairNames[i] = myArray[i][0];                   //Creates 1D String array with pair names.
        ForexPair pairNames[i] = new ForexPair(pairNames[i], (myArray[i][1]),(myArray[i][2]));
    }
}

Upvotes: 1

Views: 1534

Answers (4)

user2054528
user2054528

Reputation: 19

            final TableLayout tview = (TableLayout) findViewById(R.id.tblGridStructure);
            final JSONArray JarraymenuItems = {item1,it3m1mwer,wer,ds};//your list of items
            for (int i = 0; i < JarraymenuItems.length(); i++) 
                        {
    ableRow tr = new TableRow(this);
        tr.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
                            tview.addView(tr, LayoutParams.FILL_PARENT, 45);
            T
            final TextView etprice = new TextView(this);
            etprice.setText("your text value wat u want to display");
tr.addView(etprice );
int count = tview.getChildCount();
                    if (count % 2 != 0)
                    tr.setBackgroundColor(Color.parseColor("#E3E3E3"));
            }

Upvotes: 0

PrR3
PrR3

Reputation: 1246

1.

Can I use a 'for' loop to create an object for each row in my CSV file?

Yes, that's possible:

BufferedReader br = new BufferedReader(new FileReader(yourCsvFile));
String line;
while((line = br.readLine()) != null) {
     // do something with line.
}

2.

But how do I create the object called AUDUSD using a for loop? So that each object has a different name?

I think your mixing up two different concepts: name of variable and value of your variable called pair The value of your variable is the important point, while the name of your variable only provides code quality!

Upvotes: 0

arshajii
arshajii

Reputation: 129572

Variable names are not relevant - they aren't even kept track of after your code is compiled. If you want to map names to objects you can instead place ForexPair instances in a Map<String, ForexPair>, i.e.

Map<String, ForexPair> map = new HashMap<String, ForexPair>();

...

// in the for-loop:
map.put(pairNames[i], new ForexPair(pairNames[i], myArray[i][1],myArray[i][2]));

Although this seems slightly redundant, as you already have the name as a field in each ForexPair, so you might want to consider removing this field and keeping track of the name only via the map.

Upvotes: 1

Johannes
Johannes

Reputation: 747

Yes you can. Use a HashMap.
rough example:

HashMap<String, ForexPair> myMap = new HashMap<String, ForexPair>();
myMap.put("AUDUSD", new ForexPair(pairNames[0], (myArray[0][1]),(myArray[0][2])));
ForexPair pair = myMap.get("AUDUSD");

Upvotes: 0

Related Questions