Простой цикл итератора дает неожиданный результат

StackOverflow https://stackoverflow.com/questions/816480

Вопрос

Я уверен, что это очевидная ошибка с моей логикой, но я не могу понять, что я делаю неправильно. Проще говоря, у меня есть массив списков кодов безопасности, я хочу вычислить корреляцию между каждой комбинацией кодов безопасности. Мой код выглядит следующим образом:

private void crossCorr(ArrayList<String> codes, HashMap<String, Stock> stockMap){

    // iterate through the codes list and get all the cross correlations:

    Iterator<String> itr1 = codes.iterator();
    while(itr1.hasNext()){
        String code1 = itr1.next();
System.out.println("  -----  " +code1);
        Iterator<String> itr2 = codes.iterator();
        ArrayList<Double> corrs = new ArrayList<Double>();
        HashMap<String, Double> codeCorr = new HashMap<String, Double>();
        String code2="";
        double corr=-2;
        while(itr2.hasNext()){
            code2 = itr2.next();
            Maths calcs = new Maths();      
            corr = calcs.getCorrelation(stockMap.get(code1).getRorHistory(), stockMap.get(code2).getRorHistory());
            corrs.add(corr);    // we order this list and then use this ordered list
                                // to find the codes for the stocks with the highest
                                // correlation for any given stock
            codeCorr.put(code2, corr);
            System.out.println(code1+" - "+code2+" - Correlation is "+corr);
        }
        orderCorrs(6, codeCorr, corrs, code1);
    }

}

Вывод, который я получаю, -

----- GOOG
ХОРОШО - ХОРОШО - Соотношение 1.0000000000000002
GOOG - YHOO - Соотношение 0,6986623807707519
GOOG - MSFT - Соотношение 0,7275411317567286
GOOG - CSCO - Соотношение 0,8122979333663799
GOOG - AAPL - Соотношение 0,8217785260604609
GOOG - ADBE - соотношение составляет 0,6102679356472099
GOOG - DISH - Соотношение 0,644852624453125
GOOG - NSOL - Соотношение 0.11600387177879072
GOOG - SBUX - Соотношение 0,6694306410719489
GOOG - PSFT - корреляция -0,09921822861087544
GOOG - XOM - соотношение 0,6728272039489009
GOOG - WMT - Соотношение 0.4004364090315347
GOOG - IBM - Соотношение 0,7559988282095168
GOOG - JPM - соотношение 0,7085525367336528
GOOG - DNA - Соотношение 0.13628949379947575
GOOG - HPQ - Соотношение 0,7819350018750656
GOOG - KO - Соотношение 0.5700932682157461
GOOG - VZ - Соотношение 0,737881573641585
GOOG - INTC - Соотношение 0,7654127298771953
GOOG - SPY - Соотношение 0,8042488406758052
GOOG - PEP - соотношение составляет 0,6297924741882344
GOOG - WFC - соотношение составляет 0,5064491351161948
GOOG - ABT - соотношение составляет 0,238752389446595
GOOG - QCOM - Соотношение 0.726356709262025
GOOG - COP - Соотношение 0.570604981251932
GOOG - MCD - соотношение составляет 0,5434872575410538

Но я никогда не получаю

YHOO - GOOG - корреляция есть .... и т. д. и т. д.

Я уверен, что это простая ошибка, и по какой-то причине я ее не поднимаю.

Я знаю, что дважды выполняю расчеты корреляции, я исправлю это, как только получу эту часть, работающую по назначению.

Пожалуйста, дайте мне знать, если мне нужно предоставить больше информации.

Это было полезно?

Решение

Быстрое тестовое приложение, удалив ссылки на код, о котором мы не знаем, прекрасно работает для меня.

Возможно ли, что что-то генерирует непроверенное исключение, которое вы не обрабатываете? Если бы вы могли опубликовать короткую, но завершенную программу, демонстрирующую проблему, это очень помогло бы. Возьмите копию вашего полного проекта и просто удаляйте биты (например, жестко кодируемые данные и возвращаемые значения), пока вы не сможете убрать что-либо еще, пока проблема не исчезнет. В этот момент вы, конечно, вполне могли найти проблему для себя.

Кстати, если вы используете Java 1.5 или выше, проще использовать расширенный цикл for, чем явно использовать итератор. Вы бы сделали:

for (String code1 : codes) {
    // ...
    for (String code2 : codes) {
        // ...
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top