Simples iterador looping dá resultado inesperado
-
03-07-2019 - |
Pergunta
Estou certo de que é um erro óbvio com a minha lógica, mas eu não consigo descobrir o que estou fazendo de errado. Muito simplesmente tenho uma lista de matriz de códigos de segurança, eu quero calcular a correlação entre cada combinação de códigos de segurança. Meu código é o seguinte:
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);
}
}
A saída que eu vejo é -
----- GOOG
GOOG - GOOG - Correlação é 1,0000000000000002
GOOG - YHOO - Correlação é ,6986623807707519
GOOG - MSFT - Correlação é ,7275411317567286
GOOG - CSCO - Correlação é ,8122979333663799
GOOG - AAPL - Correlação é ,8217785260604609
GOOG - ADBE - Correlação é 0.6102679356472099
GOOG - DISH - Correlação é 0.644852624453125
GOOG - NSOL - Correlação é 0,11600387177879072
GOOG - SBUX - Correlação é ,6694306410719489
GOOG - PSFT - Correlação é -0.09921822861087544
GOOG - XOM - Correlação é ,6728272039489009
GOOG - WMT - Correlação é 0.4004364090315347
GOOG - IBM - Correlação é ,7559988282095168
GOOG - JPM - Correlação é 0.7085525367336528
GOOG - DNA - Correlação é 0.13628949379947575
GOOG - HPQ - Correlação é 0.7819350018750656
GOOG - KO - Correlação é ,5700932682157461
GOOG - VZ - Correlação é 0.737881573641585
GOOG - INTC - Correlação é ,7654127298771953
GOOG - SPY - Correlação é 0.8042488406758052
GOOG - PEP - Correlação é 0.6297924741882344
GOOG - WFC - Correlação é ,5064491351161948
GOOG - ABT - Correlação é 0.238752389446595
GOOG - QCOM - Correlação é 0.726356709262025
GOOG - COP - Correlação é 0.570604981251932
GOOG - MCD - Correlação é ,5434872575410538
Mas eu nunca fico
YHOO - GOOG -. A correlação é .... etc etc
Estou certo de que este é um erro simples e por algum motivo eu não estou pegando-o.
Eu sei que eu estou fazendo os cálculos de correlação duas vezes, eu vou corrigir isso quando eu chegar esta parte funcionando como esperado.
Por favor, deixe-me saber se eu preciso para fornecer mais informações.
Solução
A aplicação teste rápido ter referências removidos para código não sabemos sobre funciona bem para mim.
É possível que algo de lançar uma exceção desmarcada que você não está lidando? Se você pudesse postar uma curta mas completo Programa de demonstrar o problema, que iria ajudar imensamente. Leve uma cópia de seu projeto completo, e apenas remover pedaços até que você não pode tomar qualquer outra coisa longe sem o problema indo longe demais (por exemplo, dados e valores de retorno embutir). Nesse ponto você pode muito bem ter encontrado o problema por si mesmo, é claro.
A propósito, se você estiver usando Java 1.5 ou superior, é mais simples usar um prorrogado por ciclo do que usar explicitamente um iterador. Você faria:
for (String code1 : codes) {
// ...
for (String code2 : codes) {
// ...
}
}