调试Java代码需要帮助(EJML库)

调试Java代码需要帮助(EJML库),java,ejml,Java,Ejml,有人能帮我找到下面代码中的bug吗。我收到一个Java异常,但我不知道它为什么会发生。谢谢你的关注!例外情况说明如下: > Exception in thread "main" java.lang.ExceptionInInitializerError > Caused by: java.lang.ArrayIndexOutOfBoundsException > at java.lang.System.arraycopy(Native Method) &

有人能帮我找到下面代码中的bug吗。我收到一个Java异常,但我不知道它为什么会发生。谢谢你的关注!例外情况说明如下:

>    Exception in thread "main" java.lang.ExceptionInInitializerError
>    Caused by: java.lang.ArrayIndexOutOfBoundsException
>       at java.lang.System.arraycopy(Native Method)
>       at org.ejml.data.DenseMatrix64F.set(Unknown Source)
>       at org.ejml.data.DenseMatrix64F.<init>(Unknown Source)
>       at org.ejml.simple.SimpleMatrix.<init>(Unknown Source)
>       at test1.<clinit>(test1.java:14)
>线程“main”java.lang.ExceptionInInitializeError中的异常
>原因:java.lang.ArrayIndexOutOfBoundsException
>位于java.lang.System.arraycopy(本机方法)
>位于org.ejml.data.DenseMatrix64F.set(未知源)
>位于org.ejml.data.DenseMatrix64F。(未知来源)
>位于org.ejml.simple.SimpleMatrix(未知来源)
>在test1。(test1.java:14)
对于此代码:

    import org.ejml.simple.SimpleMatrix;
    import java.lang.Math;

    import java.util.Scanner;

    public class test1 {
        class testcase3 {
            public testcase3() {
                Mkt = 100000;
                E1name = new SimpleMatrix(2, 5, true, -10, -5, 0, 5, 10, 1, 2, 3,
                        4, 5);
                E1name2 = new SimpleMatrix(2, 5, true, 1, 2, 3, 4, 5, -10, -5, 0,
                        5, 10);
                E2name = new SimpleMatrix(2, 2, true, 1, 3, 1, 2);
                E2name2 = new SimpleMatrix(2, 2, true, 1, 2, 1, 3);
                EM1 = new SimpleMatrix(2, 5, true, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
                EM2 = new SimpleMatrix(2, 2, true, 0, 0, 0, 0);
                T = new SimpleMatrix(2, 2, true, 0, 0, 0, 0);
                Pa = new SimpleMatrix(1, 2, true, 0, 0);
                Position = 0;
            }

            public double Mkt;
            public SimpleMatrix E1name;
            public SimpleMatrix E2name;
            public SimpleMatrix E1name2;
            public SimpleMatrix E2name2;
            public SimpleMatrix EM1;
            public SimpleMatrix EM2;
            public SimpleMatrix T;
            public SimpleMatrix Pa;
            public int Position;

            public int newBidAsk(double bidPrice, double askPrice) {
                // log("I received a new Top-of-Book update, bid=" + bidPrice +
                // ", offer=" + askPrice);

                // data transformation
                double newMkt = (bidPrice + askPrice) / 2;
                double Grow = newMkt - Mkt;
                double Spread = (askPrice - bidPrice) / 2;

                SimpleMatrix seq = new SimpleMatrix(1, 2, true, Grow, Spread);
                SimpleMatrix z = new SimpleMatrix(1, 2, true, 0, 0);

                z.set(0, 0, Nametrans(seq.getIndex(0, 0), E1name));
                z.set(0, 1, Nametrans(seq.getIndex(0, 1), E2name));
                int act = 0;

                // parameter updating
                SimpleMatrix Px = Hmmupdate(Pa, z, EM1, EM2);
                SimpleMatrix newPa = Hmmpredict(Px, T);
                SimpleMatrix E1n = Hmmempredict(newPa, EM1, EM2, 5);
                SimpleMatrix E2n = Hmmempredict(newPa, EM1, EM2, 2);
                SimpleMatrix E = Eab(newMkt, E1n, E2n, E1name2, E2name2);
                int E1 = E.getIndex(0, 0);
                int E2 = E.getIndex(0, 1);

                // action
                if (Position == 0) {
                    int L = (int) Math.max(0,
                            Math.max(E1 - askPrice, bidPrice - E2));
                    switch (L) {
                    case 1:
                        act = 0;
                        break;
                    case 2:
                        act = 1;
                        break;
                    case 3:
                        act = -1;
                        break;
                    }
                } else if (Position == -1) {
                    int L = (int) Math.max(-askPrice, -E1);
                    switch (L) {
                    case 1:
                        act = 1;
                        break;
                    case 2:
                        act = 0;
                        break;
                    }
                } else if (Position == 1) {
                    int L = (int) Math.max(bidPrice, E2);
                    switch (L) {
                    case 1:
                        act = -1;
                        break;
                    case 2:
                        act = 0;
                        break;
                    }
                }

                Position = act + Position;
                // log("The act is " + Position);
                return Position;
            }

            public SimpleMatrix Eab(double Mkt, SimpleMatrix E1, SimpleMatrix E2,
                    SimpleMatrix E1name2, SimpleMatrix E2name2) {
                SimpleMatrix Easkbid = new SimpleMatrix(1, 2, true, Mkt, Mkt);
                for (int i = 0; i < 5; i++) {
                    for (int j = 0; j < 2; j++) {
                        Easkbid.set(0, 0,
                                Easkbid.getIndex(0, 0) + (Nametrans(i, E1name2))
                                        * E1.getIndex(0, i) * E2.getIndex(0, j));
                        Easkbid.set(0, 1,
                                Easkbid.getIndex(0, 1) + (Nametrans(i, E2name2))
                                        * E1.getIndex(0, i) * E2.getIndex(0, j));
                    }
                }
                return Easkbid;
            }

            public SimpleMatrix Hmmempredict(SimpleMatrix Pxkla, SimpleMatrix EM1,
                    SimpleMatrix EM2, int length) {
                SimpleMatrix E = new SimpleMatrix(1, length, true);
                for (int i = 0; i < 2; i++) {
                    for (int j = 0; j < length; j++) {
                        E.set(1,
                                j,
                                E.getIndex(1, j) + EM2.getIndex(i, j)
                                        * Pxkla.getIndex(1, i));
                    }
                }
                E = normalize(E);
                return E;
            }

            public SimpleMatrix Hmmpredict(SimpleMatrix Pxk, SimpleMatrix T) {
                SimpleMatrix Pxkla = new SimpleMatrix(1, 2, true, 0, 0);
                for (int i = 0; i < 2; i++) {
                    for (int j = 0; j < 2; j++) {
                        Pxkla.set(0, i, Pxkla.getIndex(0, i) + Pxkla.getIndex(0, j)
                                * T.getIndex(j, i));
                    }
                }
                Pxkla = normalize(Pxkla);
                return Pxkla;
            }

            public SimpleMatrix Hmmupdate(SimpleMatrix Pxka, SimpleMatrix zk,
                    SimpleMatrix EM1, SimpleMatrix EM2) {
                SimpleMatrix Pxk = new SimpleMatrix(1, 2, true, 0, 0);
                for (int i = 0; i < 2; i++) {
                    Pxk.set(0,
                            i,
                            (Pxka.getIndex(0, i)
                                    * EM1.getIndex(i, zk.getIndex(0, 0)) * EM2
                                    .getIndex(i, zk.getIndex(0, 1))));
                }
                Pxk = normalize(Pxk);
                return Pxk;
            }

            public SimpleMatrix normalize(SimpleMatrix B) {
                double temp = 0;
                for (int i = 0; i < B.numCols(); i++) {
                    temp = B.getIndex(0, i);
                }
                SimpleMatrix A = B;
                for (int j = 0; j < A.numCols(); j++) {
                    A.set(0, j, B.getIndex(0, j) / temp);
                }
                return A;
            }

            public double Nametrans(double a, SimpleMatrix Nama) {
                int n = Nama.numCols();
                double b = 0;
                for (int i = 0; i < n; i++) {
                    if (a == Nama.getIndex(0, i)) {
                        b = Nama.getIndex(1, i);
                    }
                }
                return b;
            }
        }

        public static void main(String[] args) {
            Scanner s = new Scanner(System.in);
            double bid = s.nextDouble();
            double ask = s.nextDouble();
            testcase3 tc3;
            int act = tc3.newBidAsk(bid, ask);
            System.out.printf("%d", act);

        }
    }
import org.ejml.simple.SimpleMatrix;
导入java.lang.Math;
导入java.util.Scanner;
公共类test1{
类testcase3{
公共测试用例3(){
Mkt=100000;
E1name=新的SimpleMatrix(2,5,true,-10,-5,0,5,10,1,2,3,
4, 5);
E1name2=新的SimpleMatrix(2,5,true,1,2,3,4,5,-10,-5,0,
5, 10);
E2name=新的SimpleMatrix(2,2,true,1,3,1,2);
E2name2=新的SimpleMatrix(2,2,true,1,2,1,3);
EM1=新的SimpleMatrix(2,5,true,0,0,0,0,0,0,0,0,0,0,0);
EM2=新的SimpleMatrix(2,2,true,0,0,0);
T=新的单纯形矩阵(2,2,真,0,0,0);
Pa=新的SimpleMatrix(1,2,true,0,0);
位置=0;
}
公共双市场;
公共SimpleMatrix E1name;
公共SimpleMatrix E2name;
公共SimpleMatrix E1name2;
公共SimpleMatrix E2name2;
公共SimpleMatrix EM1;
公共SimpleMatrix EM2;
公共单纯形矩阵T;
公共SimpleMatrix Pa;
公共职位;
新比达斯克公共交通(双倍标价,双倍askPrice){
//日志(“我收到了最新的书籍更新,bid=“+bidPrice+
//“,offer=“+askPrice”);
//数据转换
双新MKT=(投标价格+askPrice)/2;
双增长=新Mkt-Mkt;
双价差=(askPrice-bidPrice)/2;
SimpleMatrix seq=新的SimpleMatrix(1,2,真,增长,扩展);
SimpleMatrix z=新的SimpleMatrix(1,2,true,0,0);
z、 set(0,0,Nametrans(seq.getIndex(0,0),E1name));
z、 set(0,1,Nametrans(seq.getIndex(0,1),E2name));
int-act=0;
//参数更新
SimpleMatrix Px=Hmmupdate(Pa,z,EM1,EM2);
SimpleMatrix newPa=Hmmpredict(Px,T);
SimpleMatrix E1n=Hmmempredict(newPa,EM1,EM2,5);
SimpleMatrix E2n=Hmmempredict(newPa,EM1,EM2,2);
SimpleMatrix E=Eab(newMkt、E1n、E2n、E1name2、E2name2);
int E1=E.getIndex(0,0);
int E2=E.getIndex(0,1);
//行动
如果(位置==0){
int L=(int)Math.max(0,
max(E1-askPrice,bidPrice-E2));
开关(L){
案例1:
act=0;
打破
案例2:
act=1;
打破
案例3:
act=-1;
打破
}
}否则如果(位置==-1){
int L=(int)Math.max(-askPrice,-E1);
开关(L){
案例1:
act=1;
打破
案例2:
act=0;
打破
}
}否则如果(位置==1){
int L=(int)Math.max(bidPrice,E2);
开关(L){
案例1:
act=-1;
打破
案例2:
act=0;
打破
}
}
位置=动作+位置;
//日志(“行为是”+位置);
返回位置;
}
公共SimpleMatrix Eab(双Mkt、SimpleMatrix E1、SimpleMatrix E2、,
SimpleMatrix E1name2、SimpleMatrix E2name2){
SimpleMatrix Easkbid=新的SimpleMatrix(1,2,true,Mkt,Mkt);
对于(int i=0;i<5;i++){
对于(int j=0;j<2;j++){
Easkbid.set(0,0,
getIndex(0,0)+(Nametrans(i,E1name2))
*E1.getIndex(0,i)*E2.getIndex(0,j));
Easkbid.set(0,1,
getIndex(0,1)+(Nametrans(i,E2name2))
*E1.getIndex(0,i)*E2.getIndex(0,j));
}
}
返回Easkbid;
}
公共SimpleMatrix Hmmempredict(SimpleMatrix Pxkla,SimpleMatrix EM1,
SimpleMatrix(EM2,整数长度){
SimpleMatrix E=新的SimpleMatrix(1,长度,真);
对于(int i=0;i<2;i++){
对于(int j=0;j