Tentei alguns várias vezes e não consegui resolve a problemas
Java - como programar - Exercícios 6.8 Pagina 185
esse exercícios é taxa do estacionamento, um estacionamento cobra por 2hs de R$2,00, em cima da 3hs e paga cada 50 centavo por uma hora. se estacionar mais de 24hs e paga R$10,00
public class CalculateCharges {
public static void main(String[] args) {
double total;
NumberFormat totalFormat = NumberFormat.getCurrencyInstance();
Calendar data = Calendar.getInstance();
int date = Integer.parseInt(JOptionPane.showInputDialog("Insere a hora fechar o estacionamento?"));
data.set(Calendar.HOUR, date );
int horas = data.get(Calendar.HOUR);
if(horas >= 24){
total = 10.00;
}else if(horas > 3){
int exhoras = horas - 3;
double soma = exhoras * 0.5;
total = soma + 2.00;
} else {
total = 2.00;
}
JOptionPane.showMessageDialog(null," O valor a pagar: "+totalFormat.format(total));
}
}
Dexa me ver se entendi: 2hrs de estacionamento = R$2,00. Cada hora ou fração de hora acima disso, acresce R$0,50. Se ficar 24hrs ou mais o total é R$10,00 ou paga mais uma taxa de R$10,00, fora o cálculo de 2+0.50*fração ???
Seu texto não está claro amigo… Copia do jeito que está na apostila (Ctrl+C / Ctrl+V) que a gente pode entender e te dar a resposta.
Aliás vc tá com problema no código em si (tah dando algum erro) ou o problema é com a questão???
[quote=v0x][quote=jsnpereira]
esse exercícios é taxa do estacionamento, um estacionamento cobra por 2hs de R$2,00, em cima da 3hs e paga cada 50 centavo por uma hora. se estacionar mais de 24hs e paga R$10,00
[/quote]
Dexa me ver se entendi: 2hrs de estacionamento = R$2,00. Cada hora ou fração de hora acima disso, acresce R$0,50. Se ficar 24hrs ou mais o total é R$10,00 ou paga mais uma taxa de R$10,00, fora o cálculo de 2+0.50*fração ???
Seu texto não está claro amigo… Copia do jeito que está na apostila (Ctrl+C / Ctrl+V) que a gente pode entender e te dar a resposta.
Aliás vc tá com problema no código em si (tah dando algum erro) ou o problema é com a questão???[/quote]
aqui o livro diz
(taxa de estacionamento) Um estacionamento cobra uma taxa mínima de R$2,00 para estacionar por até três horas. Um adicional de R$0,50 por hora não necessariamento inteira é cobrado após as três primeiras horas. A carga máxima para qualquer dado período de 24 horas é R$ 10,00. Assuma que nenhum carro fica estacionado por mais de 24 horas por vez. Escreva um aplicativo que calcule e exiba as taxas de estacionamento de cada cliente que estacionou nessa garagem ontem. você deve inserir as horas de estacionamento para cada cliente. o programa deve exibir a cobrança para o cliente atual e calcular e exibir o total dos recibos de ontem. ele deve utilizar o método CalculateCharges oara determinar a carga para cada cliente.
Vou só dar uma dica. Fazer contas com datas no Java, como você deve ter visto no livro, é um pouco “cabuloso”. Acho que nesse ponto do seu livro (como já disse, não tenho o livro para dizer se é isso ou não), bastaria você entrar com a diferença calculada, para ficar fácil de testar a sua lógica (que é o que importa, afinal de contas). Mas se você realmente quiser fazer a diferença entre dois horários, você pode aproveitar o método abaixo, que subtrai dois objetos java.util.Calendar e retorna o resultado em horas cheias.
/**
* Este método calcula a diferença entre dois objetos Calendar, e retorna a diferença em horas cheias.
* @param cal1 O primeiro horário (o mais antigo)
* @param cal2 O segundo horário (o mais recente)
* @return cal2 - cal1, em horas.
*/
public static int diferencaCalendar (Calendar cal1, Calendar cal2) {
long t1 = cal1.getTime().getTime();
long t2 = cal2.getTime().getTime();
return (int) ((t2 - t1) / 3600 / 1000);
}
Primeiro: “você deve inserir as horas de estacionamento para cada cliente” então vc vai fzr isso manualmente, tanto com o dia/hora de entrada, quanto com o dia/hora de saída. Ou seja, o programa pede a você que digite o dia/hora de entrada e de saída e usando a função do amigo bezier curve ele calcula as horas que o cliente ficou no estacionamento.
Segundo: “o programa deve exibir a cobrança para o cliente atual e calcular e exibir o total dos recibos de ontem” cria um vetor com 31 posições (1 pra cada dia do mês). Depois a cada novo dia/hora que vc adicionar o programa tem que adicionar aquele valor no dia correspondente (adicionar somando “+=”, cuidado pra não substituir “=”) e exibir esse valor e depois exibir o valor total do dia anterior
Terceiro: “ele deve utilizar o método CalculateCharges para determinar a carga para cada cliente” então vc cria uma classe com qualquer nome, cria esse método CalculateCharges que vai receber dia/hora de entrada e de saída e vai fazer todo o cálculo que ele pediu e depois cria outra classe pra testar o método.
[quote=bezier curve]Pelo visto, é a alternativa d), não?
Vou só dar uma dica. Fazer contas com datas no Java, como você deve ter visto no livro, é um pouco “cabuloso”. Acho que nesse ponto do seu livro (como já disse, não tenho o livro para dizer se é isso ou não), bastaria você entrar com a diferença calculada, para ficar fácil de testar a sua lógica (que é o que importa, afinal de contas). Mas se você realmente quiser fazer a diferença entre dois horários, você pode aproveitar o método abaixo, que subtrai dois objetos java.util.Calendar e retorna o resultado em horas cheias.
[code]
/**
Este método calcula a diferença entre dois objetos Calendar, e retorna a diferença em horas cheias.
@param cal1 O primeiro horário (o mais antigo)
@param cal2 O segundo horário (o mais recente)
@return cal2 - cal1, em horas.
*/
public static int diferencaCalendar (Calendar cal1, Calendar cal2) {
long t1 = cal1.getTime().getTime();
long t2 = cal2.getTime().getTime();
tem um problema nisso tudo… a função diferencaCalendar retorna a diferença cheia (int) das horas de entrada e saída. Mas se o cidadão ficar 3.5 horas ele vai pagar 2 reais pelas 3hrs + 50 centavos pela meia hora, mas nesse caso a função iria retornar apenas 3 então o cálculo seria feito errado
Essa função tem que ser double e retornar exatamente a diferença entre os dois horários sem arredondar nada!
[quote=bezier curve]Pelo visto, é a alternativa d), não?
Vou só dar uma dica. Fazer contas com datas no Java, como você deve ter visto no livro, é um pouco “cabuloso”. Acho que nesse ponto do seu livro (como já disse, não tenho o livro para dizer se é isso ou não), bastaria você entrar com a diferença calculada, para ficar fácil de testar a sua lógica (que é o que importa, afinal de contas). Mas se você realmente quiser fazer a diferença entre dois horários, você pode aproveitar o método abaixo, que subtrai dois objetos java.util.Calendar e retorna o resultado em horas cheias.
[code]
/**
Este método calcula a diferença entre dois objetos Calendar, e retorna a diferença em horas cheias.
@param cal1 O primeiro horário (o mais antigo)
@param cal2 O segundo horário (o mais recente)
@return cal2 - cal1, em horas.
*/
public static int diferencaCalendar (Calendar cal1, Calendar cal2) {
long t1 = cal1.getTime().getTime();
long t2 = cal2.getTime().getTime();
Eu estava tentando a programar e não conseguir converter por exemplo atribuito é Int ou String converte para Calendar, veja em cima o atribuito fica Calendar, mas problemas Scanner e JOptionPane somente String, int e double. alguéns sabe possivelmente a converter?
[quote=jsnpereira]
Eu estava tentando a programar e não conseguir converter por exemplo atribuito é Int ou String converte para Calendar, veja em cima o atribuito fica Calendar, mas problemas Scanner e JOptionPane somente String, int e double. alguéns sabe possivelmente a converter?
Aguardo ao retorno…[/quote]
Véi tu escreve em russo e usa o google tradutor eh?? Dá pra entender nada q tu fala…
[quote=v0x][quote=jsnpereira]
Eu estava tentando a programar e não conseguir converter por exemplo atribuito é Int ou String converte para Calendar, veja em cima o atribuito fica Calendar, mas problemas Scanner e JOptionPane somente String, int e double. alguéns sabe possivelmente a converter?
Aguardo ao retorno…[/quote]
Véi tu escreve em russo e usa o google tradutor eh?? Dá pra entender nada q tu fala…[/quote]
Desculpa! Foi mal, pois sou surdo, às vezes erra de português por quanto digita rápido sem corrigir antes de enviar.
Então Gostaria de saber como converter String para Calendar/Horas. Por exemplo, String horaEntrada recebe o valor 18:00, e converte para Calendar/hora ?cal1? enviar para o método diferencaCalendar mesmo o método que Biezer Curve mostrou. Já tentei em várias vezes e não consegui, ainda aparecendo à identificação erro.
[quote=jsnpereira]
Desculpa! Foi mal, pois sou surdo, às vezes erra de português por quanto digita rápido sem corrigir antes de enviar.
Então Gostaria de saber como converter String para Calendar/Horas. Por exemplo, String horaEntrada recebe o valor 18:00, e converte para Calendar/hora ?cal1? enviar para o método diferencaCalendar mesmo o método que Biezer Curve mostrou. Já tentei em várias vezes e não consegui, ainda aparecendo à identificação erro.
Espero que você entende… obrigado!![/quote]
Cara tô super mal pela minha ignorância… mil desculpas por favor :oops:
Bem, eu não sabia responder sua pergunta, mas procurei sobre o assunto como forma de pedido de desculpas. Consegui a resposta! O método recebe como parâmetro uma string do tipo HH:mm (ex: 18:00) converte ela em formato Calendar e retorna o Calendar pra vc usar lá naquele outro método diferencaCalendar…
Segue o método:
public Calendar converterHora(String str) throws ParseException {
Calendar cal=Calendar.getInstance();
DateFormat formatter;
Date date;
formatter = new SimpleDateFormat("HH:mm");
date = (Date)formatter.parse(str);
cal.setTime(date);
return cal;
}PS: Na classe que vc inserir esse método vai precisar de:
import java.text.*;
import java.util.*;Testei aqui e rodou perfeitinho!!!
Cara tô super mal pela minha ignorância… mil desculpas por favor :oops:
Bem, eu não sabia responder sua pergunta, mas procurei sobre o assunto como forma de pedido de desculpas. Consegui a resposta! O método recebe como parâmetro uma string do tipo HH:mm (ex: 18:00) converte ela em formato Calendar e retorna o Calendar pra vc usar lá naquele outro método diferencaCalendar…
Segue o método:
public Calendar converterHora(String str) throws ParseException {
Calendar cal=Calendar.getInstance();
DateFormat formatter;
Date date;
formatter = new SimpleDateFormat("HH:mm");
date = (Date)formatter.parse(str);
cal.setTime(date);
return cal;
}PS: Na classe que vc inserir esse método vai precisar de:
import java.text.*;
import java.util.*;Testei aqui e rodou perfeitinho!!![/quote]
Ah! sem problemas… que acontece…
vou testar esse programa amanhã, hoje deve muita coisa de fazer… Mais uma vez obrigado!!