2011-01-13 3 views
0

Я использую цикл for для добавления «m» к строковому массиву, а затем передавая каждую строку в DDE-соединение для загрузки котировки акций.Ядро Java не создает строку правильно

String[] symbols = {"AUDUSD", "EURUSD", "GBPUSD", "USDJPY"}; 

    String ibfxSym[] = new String[symbols.length]; 

    for(int i = 0; i<symbols.length;i++) { 
     ibfxSym[i] = symbols[i] + "m"; 

    } 
      // start DDE 
    for (int i = 0; i < connections.length; i++) { 
     try { 
      connections[i].getQuote(ibfxSym[i]); 
     } catch (Exception e) { 
      System.out.println("error"); 
     } 

Это не работает, но если я прохожу в:

String[] ibfxSym = {"AUDUSDm", "EURUSDm", "GBPUSDm", "USDJPYm"}; 

вместо цикла она работает просто отлично. Я пробовал печатать каждую строку, поскольку она создается в цикле, и они выглядят одинаково. Есть ли какое-то странное форматирование, которое добавляет цикл, который я не вижу? Я даже пробовал:

ibfxSym[i] = String.valueOf(ibfxSym[i].trim()); 

, чтобы увидеть, возможно ли возвращение каретки или что-то присоединенное, что я не мог видеть. Какие-нибудь идеи о том, что здесь происходит? Спасибо.

+1

вы говорите, что после цикла, [] массив ibfxSym не содержит того, что вы думали, что это будет? Не должно быть добавлено каких-либо возвратов каретки, и код кажется правильным, за исключением getQuote (ibfxSym [i]) - количество подключений, такое же, как размер массива? – Kylar

+1

Вы уверены, что 'connections.length' совпадает с' ibfxSym.length'? – Jeremy

+1

«Это не работает» может быть более конкретным. –

ответ

2

Вы не читаете из того же массива, что вы модифицирующие ...

ibfxSym[i] = symbols[i] + "m"; 

for (int i = 0; i < connections.length; i++) { 
    try { 
     connections[i].getQuote(ibfxSym[i]); 

Других слов, вы предполагаете, что i, будучи производным от итерация connections, также является допустимым индекс для ibfxSym.

+0

Что? Он назначает ibfxSym и вызывает getQuote на нем. – Kylar

+0

@Kylar: Точка @Falmarri делает то, что OP создает 'ibfxSym', а затем выполняет итерацию над ним с индексом, полученным из итерации по« соединениям », что небезопасно, если вы не знаете **, это такой же длины или если первый меньше. – Jeremy

+0

Ах, это не то, что он сказал. Он подразумевает, что он печатает из другого массива, а не другого счетчика индексов. Я понимаю, о чем вы говорите. – Kylar

0

Вы пытались сделать это:

for(int i = 0; i<symbols.length;i++) { 
    ibfxSym[i] = new String(symbols[i] + "m"); 

} 
+0

Вызов конструктора 'String' здесь избыточен. – Jeremy

+0

Использование + создает новую строку, наличие новой новой строки не должно иметь большого значения. –

+0

Это происходит под капотом уже (sorta .. stringbuffer фактически используется в обеих ситуациях.) – Kylar

1

если

connections.length 

больше, чем

ibfxSym.length 

или в данном случае 4, вы должны получить индекс массива из исключение исключений.

2

Ваш цикл работает нормально, цикл соединения вместо будет работать, только если соединения массив отображает ваш массив ibfxSym хотя ..

+0

что он сказал ... – davogotland

Смежные вопросы