Aplicando todos os conceitos de Java na aplicação

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! :smiley:

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!

Em primeiro lugar está totalmente procedural. Isso prova que mesmo usando uma linguagem OO é possível programar de forma procedural.

Primeiro divida seu sistema em Objetos com a devida responsabilidade de cada um deles. Eu vejo pelo menos 3 objetos: CPF, Quarto e um Servico de Alocação.

Blz, mais tarde coloco aqui como ficou e tu me diz o que achou… abraços!

Ok!