gpt4 book ai didi

java - "even teams"代码的迭代运行速度更快

转载 作者:太空宇宙 更新时间:2023-11-04 12:09:23 26 4
gpt4 key购买 nike

我正在编写代码,根据玩家的得分 (puntajes) 创建两个“偶数团队”。

该算法遍历球员数组并比较每个球员的得分以获得最小差异,然后将球员分为两个数组,每队一个。

这是我的代码:

if (listaDeJugadores.size() == 6) 
//In this case I'm looking for a 6 player array, to create 3 vs 3 teams, but I'm looking to do until 22 (11 vs 11). Any ideas are welcomed.
{
int dif1 = Math.abs((listaDeJugadores.get(0).getPuntaje() + listaDeJugadores.get(1).getPuntaje() + listaDeJugadores.get(2).getPuntaje())
- (listaDeJugadores.get(3).getPuntaje() + listaDeJugadores.get(4).getPuntaje() + listaDeJugadores.get(5).getPuntaje()));
int jugador1 = 0;
int jugador2 = 1;
int jugador3 = 2;
int jugador4 = 3;
int jugador5 = 4;
int jugador6 = 5;
int a = 0;
int b = 0;
int c = 0;

//The two fors are to search the arrays. The iterador is to find the other three remaining positions to compare.
for (int cont2 = 1; cont2 < listaDeJugadores.size() - 1; cont2++) {
for (int cont3 = cont2 + 1; cont3 < listaDeJugadores.size(); cont3++) {
ArrayList<Integer> arr = new ArrayList<>();
int iterador[] = {0,1,2,3,4,5,6};
int j = 1;
for (int i=0;i<iterador.length;i++)
{
//I look for the missing players to compare from the 6 possible
if (cont2==iterador[i]|cont3==iterador[i])
{
j++;
}
else
{
c=b;
b=a;
a=j;
i--;
j++;
}
}

int dif = Math.abs((listaDeJugadores.get(0).getPuntaje() + listaDeJugadores.get(cont2).getPuntaje() + listaDeJugadores.get(cont3).getPuntaje())
- (listaDeJugadores.get(a).getPuntaje() + listaDeJugadores.get(b).getPuntaje() + listaDeJugadores.get(c).getPuntaje()));
if (dif < dif1) {
dif = dif1;
jugador1 = 0;
jugador2 = cont2;
jugador3 = cont3;
jugador4 = a;
jugador5 = b;
jugador6 = c;
}
}
}
//I add the best available sorted teams to EquipoBlanco or EquipoNegro.
listaEquipoBlanco.add(listaDeJugadores.get(jugador1));
listaEquipoBlanco.add(listaDeJugadores.get(jugador2));
listaEquipoBlanco.add(listaDeJugadores.get(jugador3));
listaEquipoNegro.add(listaDeJugadores.get(jugador4));
listaEquipoNegro.add(listaDeJugadores.get(jugador5));
listaEquipoNegro.add(listaDeJugadores.get(jugador6));

team1.setText("Equipo Blanco: " + (listaEquipoBlanco.get(0).getPuntaje() + listaEquipoBlanco.get(1).getPuntaje() + listaEquipoBlanco.get(2).getPuntaje()));
team2.setText("Equipo Negro: " + (listaEquipoNegro.get(0).getPuntaje() + listaEquipoNegro.get(1).getPuntaje() + listaEquipoNegro.get(2).getPuntaje()));

我认为代码没问题,但是当我尝试运行它时,它无法打开,因为它的性能非常糟糕。我想我可能已经迭代到无穷大或类似的东西,但当我看着它并看到 fors 里面的 fors 里面的 fors 时,我知道出了什么问题。

如何让它运行得更快并具有更好的性能?

最佳答案

快速查看一下,内部 for 循环看起来很可疑。如果不尝试的话,我可能会错(对我来说很糟糕),但它有一个 i--; 在那里,而 i 是循环索引,所以这种情况一直都会发生,或者经常发生,你永远不会退出那个循环。

当这不是真的时,就会发生这种情况:cont2==iterador[i]|cont3==iterador[i](按位或,应该是逻辑或||顺便说一句),不确定在某些时候是否保证是正确的?甚至也许可以来回。 cont2 和 contr3 不会改变,但 i 可以改变一点。

没有保护i低于零,但可能会崩溃并烧毁(异常(exception))。

关于java - "even teams"代码的迭代运行速度更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40010406/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com