使用for循环动态创建对象

时间:2013-06-14 13:47:20

标签: java

我对Java相对较新,并试图创建一个应用程序来帮助我的交易。我有一个方法来读取我输入的csv文件,该文件是x行数和3列的表。它将其读作多维String数组(String [] [])例如

配对-----买入价---卖出价格
澳元兑美元0.9550 --- 0.9386
EURUSD 1.3333 --- 1.3050
GBPUSD 1.5705 --- 1.5550

(请原谅我的格式化)

我有一个名为ForexPair的构造函数,如下所示:

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);
}

我的问题是:我可以使用'for'循环为CSV文件中的每一行创建一个对象吗?我相信我可以使用ArrayList。但是我希望我创建的每个对象的名称都是我的csv文件的第一列中的Pair Name。例如:

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

但是如何使用for循环创建名为AUDUSD的对象?这样每个对象都有不同的名字?

目前我有这段代码:

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]));
    }
}

4 个答案:

答案 0 :(得分:0)

变量名称无关紧要 - 编译代码后甚至无法跟踪它们。如果要将名称映射到对象,可以将ForexPair个实例放在Map<String, ForexPair>中,即

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]));

虽然这似乎有点多余,但由于您已在每个ForexPair中将该名称作为字段,因此您可能需要考虑删除此字段并仅通过地图跟踪名称。

答案 1 :(得分:0)

是的,你可以。使用HashMap
粗略的例子:

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");

答案 2 :(得分:0)

1

  

我可以使用'for'循环为CSV文件中的每一行创建一个对象吗?

是的,这是可能的:

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

2

  

但是如何使用for循环创建名为AUDUSD的对象?这样每个对象都有不同的名字?

我认为你混淆了两个不同的概念:变量名称变量值称为对 变量的值是重要的一点,而变量的名称只提供代码质量!

答案 3 :(得分:0)

            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"));
            }