Não vou colocar o código, pois é meio grande, confuso e eu poderia ser plotado :lol:
Resumidamente, é isso:
Há um TreeMap <String, ArrayList>. A cada iteração de um for, os ArrayList dos for são preenchidos com inteiros e, no final, há uma comparação.
Detalhes:
1- Não se usa supertipos; ok
2- Nem generics; ok
3- Não há motivo algum para o Map ser ordenado.
4- O pior de tudo: no final das contas, daria no mesmo jogar tudo num List só.
no Javascript o objeto Date tem o metodo getMonth que retorna o mes atual, porém este retorna o mes começando do “0” então o sujeito para contornar isto teve a brilhante ideia
// O getMonth do JavaScript retorna o mes errado.
function getMes(){
var month = new Date().getMonth();
var meses = new Array();
meses.push( 1 )
meses.push( 2 )
meses.push( 3 )
meses.push( 4 )
meses.push( 5 )
meses.push( 6 )
meses.push( 7 )
meses.push( 8 )
meses.push( 9 )
meses.push( 10 )
meses.push( 11 )
meses.push( 10 )
return meses[ month ];
}
DecimalFormat format = new DecimalFormat("#,##0.0000#");
String str = format.format(arredondado);
str = str.replace(',', '.');
arredondado = Double.parseDouble(str);
return arredondado;
}[/code]
O que aquele trecho com o DecimalFormat faz ali???
Eu substituiria o método acima pelo trecho abaixo:
double n = Math.pow(10,3);
double b = Math.round( a*n ) / n;
Salvo engano se alguma regra bem específica determina que, se n for negativo, tem que fazer floor em vez de ceil, mas pleo uso no programa, me parece que não é o caso.
ps: Com n negativo não funciona. Erro na potência. Precisa colocar o absoluto de n.
Date dtAtual = new Date(
new HDate(dtFormat.format(
new Date(System.currentTimeMillis())
)).getTime()
);
Análise semântica do que o cara fez:
Pega os milissegundos da hora atual do sistema
Cria um objeto Date para aquela hora
Formata o Date para String
Cria um HDate, que é uma extensão de Date, recebendo como argumento a data no formato String
Pega os milissegundos do HDate criado
Cria um Date com aqueles milissegundos
select r.* from ( select * from TABELA o where 1=1
and o.COD >= ?
and (to_date(o.DATA_INI, 'DD/MM/YYYY') <= to_date(sysdate,'DD/MM/YYYY'))
and (to_date(o.DATA_FIM, 'DD/MM/YYYY') >= to_date(sysdate, 'DD/MM/YYYY'))
order by o.COD desc ) r where rownum < 451
O mais legal é ele converter campos do tipo date e sysdate para DATE.
Além do que ele dá um order by de uma coluna que ele está informando o valor.
Fora o subselect só para pegar os primeiros 450 registros.
Este estilo de código costumo escrever em C++ porque:
Ele não tem o “labeled loop”
Usar “try/catch” até funciona em C++, mas a maior parte das APIs não lança exceções e sou obrigado a ficar checando o valor de retorno.
Se eu fizesse isto aqui em Java, não pareceria tosco? Acho que todo mundo já viu um “while (true)”, mas poucos já viram um “while (false)”.
do {
if (!SUCCEEDED (bla()) break;
ble();
if (!SUCCEEDED (bli()) break;
blo();
blu();
} while (false);
/**
* Método que recebe uma lista com duas entidade e compara o conteudo campo a campo.
* @param lista fornece as duas entidade para a comparação sendo que a primeira é a nova e a segunda a atual.
* @return String delimitada por ponto e vírgula contendo o nome dos campos que são diferentes entre si.
*/
public String compararEntidades(List lista) { /* .... */ }
Sugestão:
[code]/**
Compara o conteúdo dos atributos dos dois objetos.
@param obj1 Objeto a ser comparado.
@param obj2 Objeto a ser comparado.
@return Array de String contendo os nomes dos atributos diferentes entre si em cada posição do array. /
public String[] compararEntidades(Object obj1, Object obj2) { / … */ }[/code]