No horário da monitoria, até o final do curso (algumas pessoas só percebem que o monitor é um estrupício no final de novembro).
Eu perdi um monte, desculpe.
Na correção, utilizei como referência:
Eu tentei sempre apontar o local do erro, e não me lembro de ter deixado algum programa escrito apenas "não funciona". No início da correção, quando eu ainda estava com paciência, eu até detalhava os erros encontrados, mas como alguns eram muito freqüentes, descrevo-os a seguir (não necessariamente apontando as soluções). Eu fiquei surpreso com a quantidade de coisas que não funcionavam num EP já feito e corrigido (problemas de algoritmo, não de linguagem). Alguns erros eu nem apontei nas listagens.
Focalize: Incluir C, depois A, e depois B. A tabela com os dados fica:
0 | C |
1 | A |
2 | B |
E o vetor Rank fica:
0 | 1 |
1 | 2 |
2 | 0 |
Com uma variável apontando para a próxima posição em que será incluída uma chapa (3, neste caso).
Imagine que a chapa C foi excluída. A primeira posição do vetor Rank vai sair, e as outras sobem. A tabela de dados fica como está. A "variável apontadora" passa a apontar para a posição 2 da tabela de dados, já que uma chapa foi excluída. Imagine agora que é incluída uma nova chapa. Ela será incluída na posição 2 da tabela, que já está ocupada. As escabrosas conseqüências advindas disso ficam, como dizem os livros de Matemática, por conta do leitor.
Muitos programas não se importam se a tabela irá estourar um dia. Isso, apesar de incorreto, não foi considerado. Por outro lado, se o programa não prevê que a tabela pode ficar vazia, houve desconto.
Encontrei até um programa com apenas um método (o main). Mas o que importa (além, é claro, dos dias que o Banco Real dá sem juros ao cheque especial) é a quantidade, enorme e arrepiante, do modificador static que achei nos programas. Claro que, se inventaram static, então é porque às vezes precisa. Mas é muito raro. Se você, não acredita em mim, segue um trecho de uma conversa que tive com a professora Dilma: "...mas esse (o uso de variáveis static) é um caso tão atípico...".
Sobre public, NINGUÉM precisava usar (experimente tirar os seus, e verá que tudo continuará bem).
A reordenação seria mais rápida se aproveitasse o fato de que o vetor já está parcialmente ordenado (normalmente, só há uma posição fora de ordem).
Muitas vezes o elemento é encontrado antes disso, mas a busca binária prossegue.
Por que o Java tem try e catch? Segundo um livro na biblioteca, escrito por alguém da equipe de desenvolvedores da linguagem, é para evitar algo do tipo (adaptado para Pascal):
Reset(arq);
If IOResult <> 0 then
trata erro
else begin
while not eof(arq) do begin
read(arq, c);
If IOResult <> 0 then
trata erro
else begin
write(c);
if IOResult <> 0 then
trata erro
end
end
end
Quando seria bem mais limpo
try
Reset(arq);
while not eof(arq) do begin
read(arq, c);
write(arq, c)
end
catch (Erro e)
trata erro
end
O fato é que muita gente fazia teste de erro a cada leitura. O programa ficava bem poluído.
Comentários do tipo
super(); // chama o método da classe pai
são dispensáveis. Explicar o que faz um método é ótimo, mas nem todo mundo fez. A regra para os próximos EPs será "Se eu quiser saber o que é isso e não houver comentário, perde ponto". Assim, tente se colocar no lugar de quem vai corrigir.
O conceito de nome mnemônico que alguns têm também precisa ser alterado. Nomes como TOC, TDM ou TFDI não dizem muita coisa. Variáveis com o nome do autor do programa servem como indicativo da personalidade de quem escreveu, mas tem pouca finalidade documentacional.
while (i < tamanho && !achou) do
{
if (Chapa[i] == procurada)
achou = true;
else
i++;
System.out.println("Precisa dizer mais alguma coisa?");
}
if (a == true) é o mesmo que if (a)
if (a == false) é o mesmo que if (!a)
Eu recebi várias mensagens na compilação de que os programas utilizavam métodos obsoletos. Na verdade, se o programa compilar eu estou satisfeito, mas as novas versões do Java corrigiram diversas inconsistências (principalmente na AWT) e seria interessante não utilizá-las mais.
Há uma coisa que todos os programas (com interface gráfica) deviam fazer: responder ao evento fechar janela. Alguns programas só fecham com o Arquivo, Sair.