سؤال

وأنا واثق من أنه خطأ واضح مع المنطق بلدي، ولكن أنا لا يمكن أن يبدو للعمل على ما أقوم به خطأ. بكل بساطة لدي قائمة مجموعة من الرموز الأمنية، وأريد لحساب ارتباط بين كل مجموعة من الرموز الأمنية. قانون بلدي هو كما يلي:

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
GOOG - GOOG - الارتباط هو +1.0000000000000002
GOOG - YHOO - الارتباط هو +0.6986623807707519
GOOG - MSFT - الارتباط هو +0.7275411317567286
GOOG - CSCO - الارتباط هو +0.8122979333663799
GOOG - AAPL - الارتباط هو +0.8217785260604609
GOOG - ADBE - الارتباط هو +0.6102679356472099
GOOG - صحن - الارتباط هو 0.644852624453125
GOOG - NSOL - الارتباط هو +0.11600387177879072
GOOG - SBUX - الارتباط هو +0.6694306410719489
GOOG - PSFT - الارتباط هو -،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 - الارتباط هو .... الخ الخ

وأنا واثق من هذا هو خطأ بسيط ولسبب ما أنا لا اختيار عنه.

وأنا أعلم أنني أفعل الحسابات ارتباط مرتين، أنا سأثبت ذلك مرة واحدة أحصل على هذا الجزء تعمل على النحو المنشود.

واسمحوا لي أن أعرف إذا كنت بحاجة لتقديم مزيد من المعلومات.

هل كانت مفيدة؟

المحلول

وتطبيق اختبار سريع وجود ما يشير إلى رمز إزالة ونحن لا نعرف حول يعمل بشكل جيد بالنسبة لي.

هل من الممكن أن شيئا ما في رمي استثناء دون رادع الذي كنت لا يعالج؟ إذا كنت قد الرد قصيرة ولكن كاملة برنامج يدل على مشكلة، وهذا من شأنه أن يساعد كثيرا. أخذ نسخة من المشروع الكامل، ومجرد إزالة بت (على سبيل المثال من الصعب ترميز البيانات وإرجاع القيم) حتى لا يمكنك أن تأخذ أي شيء آخر بعيدا دون مشكلة يذهب بعيدا جدا. عند هذه النقطة قد يكون قد وجدت هذه المشكلة لنفسك، بطبيعة الحال.

وبالمناسبة، إذا كنت تستخدم جافا 1.5 أو أكبر، فمن الأسهل استخدام الموسعة لحلقة من استخدام صراحة مكرر. كنت تفعل:

for (String code1 : codes) {
    // ...
    for (String code2 : codes) {
        // ...
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top