![]() |
|
A primeira coisa que necessita em sua aplicação é de alguns campos para armazenar os dados, os totais e as médias:
A solução
que usa a
aritmética de ponto fixo deve fazer algumas
suposições simplificadas. Por exemplo,
tratará somente das milhas inteiras para a milhagem
(esta,
nivelará para fora o tempo excedente porque
incorporará a milhagem atual do veículo,
não a diferença desde último
reabastecimento. Segundo,
assumirá que os
galões e o custo
estão incorporados usando
centésimo de galões (com nenhum ponto decimal) e
em centavos. Ou seja, em vez de
incorporar 12,43
galões, incorporará 1243;
e
em vez de 20,98, incorporará 2098. Isto
facilmente o fará
digitar usando o
"keypad" do telefone, e mantem também coisas
agradáveis e fáceis de manipular em
inteiros. Quando calcular os sumários para a
tela sumária, usará a
divisão do inteiro e
o módulo mostrará os galões formatados
com
exatidão de dois lugares decimais.
A arte de escrever aplicações Java ME envolve uma quantidade justa de compromisso. As alternativas deveriam permitir que um "string" seja entrada nos campos numéricos, e então analisar gramaticalmente para fora da informação do inteiro, ou usar CLDC 1.1 e ir para o ponto flutuante cheio (tomar o cuidado de que exatamente terá que suportar o alvo de seus dispositivos). De uma forma ou de outra, isto é deixado como exercício para o leitor por breve.
Assim, terá agora seus campos. Poderá adicionar alguma funcionalidade para usá-los:
this.currentMileageVal =
Long.parseLong(this.currentMileage.getString());
int currentGallons =
Integer.parseInt(this.gallons.getString());
int currentCost = Integer.parseInt(this.cost.getString());
// mostre os totais novos
this.totalMileageVal = this.currentMileageVal
- this.startingMileageVal;
this.totalCostVal += currentCost;
this.totalFuelVal += currentGallons;
this.recalcAveragesAndUpdateSummary();
// aritmética de ponto fixo - conserve tudo
multiplicado
// por um fator 100
// Necessidade de proteger contra a divisão por
0
if(this.totalMileageVal == 0) {
this.avgCostVal = 0;
} else {
this.avgCostVal = this.totalCostVal
/ this.totalMileageVal;
}
if(this.totalFuelVal == 0) {
this.avgMpgVal = 0;
}
else {
// Nota: o multiplicador 10000 deve fazer exame no
combustível do cliente
// multiplicador 100 e uns outros 100 para adicionar DP 2
à média
this.avgMpgVal = (this.totalMileageVal * 10000)
/ this.totalFuelVal;
}
// Carregar "String" para valores formatados
String tempFormat = null;
// atribuir exatamente a milhagem corrente para
conversão "String"
this.totalMileage.setText(Long.toString(
this.currentMileageVal));
// Para "avg cost" - formatar como 23 centavos
tempFormat = Long.toString(this.avgCostVal) + " cents";
this.avgCostPerMile.setText(tempFormat);
// e ponto fixo tambem para "MPG"
tempFormat = Long.toString(this.avgMpgVal / 100) + "." +
Long.toString(this.avgMpgVal % 100);
this.avgMpg.setText(tempFormat);
}
Em seguida, necessitará preencher o código "Initialization". Isto é completamente simples agora que você fêz o trabalho acima:
public void initializeTotalsAndAverages() {
this.startingMileageVal =
Long.parseLong(this.startingMileage.getString());
this.currentMileageVal = this.startingMileageVal;
this.totalMileageVal = 0;
this.totalCostVal = 0;
this.totalFuelVal = 0;
this.recalcAveragesAndUpdateSummary();
}
Esta é a funcionalidade no lugar, tão simples quanto ela é. Poderá agora eliminar os erros da aplicação outra vez. Inicialize-o com uma milhagem começando e então adicione alguns detalhes. Pretende-se ter cheio depois 300 milhas ou algo assim. Deverá ver os detalhes sumários atualizados quando detalhes novos der "OK". Não esqueça de incorporar os galões multiplicados por um fator de 100 (1243 para 12,43 galões) e pelo custo em centavos (2065 para $20,65).
Existe, entretanto, uma última parte faltante. Quando finalizar agora a direita da aplicação, todos os dados são perdidos. Necessitará de um caminho para persistir. Felizmente, o mecanismo de persistencia fornecido em Java ME é absolutamente simples.