Olá pessoal, hoje eu fiz o programa abaixo e ele resolve o que foi pedido, entretanto, falta muito para ele se tornar um programa Java de qualidade. Alguém pode me informar onde posso melhorar no programa? Informar onde estou errando nos conceitos de Java, coisas que podem ser melhoradas… Qualquer ajuda é bem vinda!
Obs.: Abaixo do código segue o link das explicações do que o programa faz.
[code]public class L3Q4 {
static int[] hashing;
static int[] hashing2;
static int counterA, counterB;
public static int alice(int cpf, int y, int z, int n) {
counterA++;
int g = 0;
g = (y + z) % n;
if (hashing[g] == 0) {
hashing[g] = cpf;
} else {
alice(cpf, g, z, n);
}
return counterA;
}
private static int bob(int cpf2, int y2, int n2, int m2, int o2) {
counterB++;
int h2 = 0, g2 = 0;
h2 = (cpf2 % m2) + o2;
g2 = (y2 + h2) % n2;
if (hashing2[g2] == 0) {
hashing2[g2] = cpf2;
} else {
bob(cpf2, g2, n2, m2, o2);
}
return counterB;
}
public static void main(String[] args) {
Arquivo file = new Arquivo("a.in", "a.out");
int m, n, o, w, z, a, cpf, f, y;
int m2, n2, o2, w2, z2, a2, cpf2 = 0, f2, y2;
while (!file.isEndOfFile()) {
m = file.readInt();
n = file.readInt();
o = file.readInt();
w = file.readInt();
z = file.readInt();
a = file.readInt();
m2 = m;
n2 = n;
o2 = o;
w2 = w;
z2 = z;
a2 = a;
hashing = new int[n];
hashing2 = new int[n2];
for (int x = 0; x < a; x++) {
cpf = file.readInt();
cpf2 = cpf;
f = (cpf * w) % n;
y = f;
if (hashing[f] == 0) {
hashing[f] = cpf;
} else {
alice(cpf, y, z, n);
}
f2 = (cpf2 * w2) % n2;
y2 = f2;
if (hashing2[f2] == 0) {
hashing2[f2] = cpf2;
} else {
bob(cpf2, y2, n2, m2, o2);
}
}
file.println(counterA + " " + counterB);
counterA = 0;
counterB = 0;
for (int x = 0; x < n; x++) {
hashing[x] = 0;
hashing2[x] = 0;
}
}
file.close();
}
}[/code]
http://moreno.cin.ufpe.br/~if672cc/index.php/home/problem/67
Grato pela atenção!