1

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

对----- 买入价 --- 卖出价
AUDUSD 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 文件第一列中的对名称。例如:

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

4 回答 4

1

变量是不相关的——在你的代码编译之后,它们甚至不会被跟踪。如果要将名称映射到对象,则可以将ForexPair实例放在 a 中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,因此您可能需要考虑删除此字段并仅通过地图跟踪名称。

于 2013-06-14T13:53:52.407 回答
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 的对象?这样每个对象都有不同的名称?

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

于 2013-06-14T13:58:56.377 回答
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"));
            }
于 2013-06-14T14:03:33.733 回答
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");
于 2013-06-14T13:54:01.453 回答