Inhalt

Aktueller Ordner: duesseldorfer-schuelerinventar-java-client/src/main/java/com/duesk/utils
⬅ Übergeordnet

Calculator.java

package com.duesk.utils;

public class Calculator {
    
    public static int[] calculateSums(int[] items) {
        int[] sums = new int[7];
        sums[1] = 0;
        for (int i = 0; i < 10; i++) sums[1] += items[i];
        
        sums[2] = 0;
        for (int i = 10; i < 20; i++) sums[2] += items[i];
        
        sums[3] = 0;
        for (int i = 20; i < 28; i++) sums[3] += items[i];
        sums[3] += items[8] + items[9];
        
        sums[4] = 0;
        for (int i = 28; i < 36; i++) sums[4] += items[i];
        
        sums[5] = items[0] + items[1] + items[5] + items[6] + items[7] + items[8] + items[9] +
                   items[11] + items[12] + items[13] + items[14];
        
        sums[6] = items[2] + items[3] + items[4] + items[8] + items[9] + items[10] + items[16] + items[17];
        
        return sums;
    }
    
    public static int[] calculateProfileValues(int[] sums, double[][] norm) {
        int[] values = new int[6];
        for (int k = 1; k <= 6; k++) {
            values[k-1] = 4;
            for (int p = 0; p < 5; p++) {
                if (sums[k] < norm[k-1][p]) {
                    values[k-1] = p;
                    break;
                }
            }
        }
        return values;
    }
    
    public static double calculateCorrelation(int[] seValues, int[] feValues) {
        double[] se = new double[6];
        double[] fe = new double[6];
        for (int i = 0; i < 6; i++) {
            se[i] = seValues[i] + 1;
            fe[i] = feValues[i] + 1;
        }
        
        double seMean = 0, feMean = 0;
        for (int i = 0; i < 6; i++) {
            seMean += se[i];
            feMean += fe[i];
        }
        seMean /= 6;
        feMean /= 6;
        
        double numerator = 0, seVar = 0, feVar = 0;
        for (int i = 0; i < 6; i++) {
            double seDiff = se[i] - seMean;
            double feDiff = fe[i] - feMean;
            numerator += seDiff * feDiff;
            seVar += seDiff * seDiff;
            feVar += feDiff * feDiff;
        }
        
        if (seVar == 0 || feVar == 0) return 0;
        return numerator / Math.sqrt(seVar * feVar);
    }
    
    public static double calculateAgreement(int[] seItems, int[] feItems) {
        int matches = 0;
        for (int i = 0; i < 36; i++) {
            if (seItems[i] == feItems[i]) matches++;
        }
        return matches * 100.0 / 36;
    }
    
    public static String getRating(int value) {
        switch (value) {
            case 1: return "weit unterdurchschnittlich";
            case 2: return "unterdurchschnittlich";
            case 3: return "durchschnittlich";
            case 4: return "überdurchschnittlich";
            case 5: return "weit überdurchschnittlich";
            default: return "unbekannt";
        }
    }
}