Programa onibus

Calcule o consumo de combustível de bus1 e bus 2 e exiba os resultados e para calcular o tempo de viagem dado a distância e sabendo que o ônibus andará sempre a 80 Km/h.
Estou com problemas para fazer o calculo alguem pode me ajudar?

public class Onibus {

int id;
String rota;
String origem;
String destino;
int horaPartida;
int minutoPartida;
int distancia;
int TempoViagem;

public Onibus(int id, String rota, String origem, String destino, int horaPartida, int minutoPartida, int distancia) {
    this.id = 354;
    this.rota = "POA‐LJO";
    this.origem = "Lajeado";
    this.destino = "Torres ";
    this.horaPartida = 9;
    this.minutoPartida = 0;
    this.distancia = 359;

}

public Onibus(int id, String origem, String destino, int distancia) {
    this.id = 343;
    this.origem = "Lajeado";
    this.destino = "Progresso";
    this.distancia = 63;
}

public static void main(String[] args) {

    Onibus bus1 = new Onibus(1, "Lajeado", "Canoas", 103);
    Onibus bus2 = new Onibus(2, "EST‐TOR", "Estrela", "Torres", 10, 30, 287);

}

}

Implementei uma função para calcular o tempo de viagem. Para o consumo de combustível, é necessário a informação de quantos km cada veículo faz com um litro, e baseada na função calculaTempo, você pode implementar uma para calcular o consumo.

Sobre o restante do código, não tem sentido atribuir valores constantes aos atributos da classe no construtor, você deve atribuir os valores ao instanciar a classe e criar um novo objeto, usando os conceitos de orientação a objetos, pois assim você atribui valor aos atributos no momento de criação de cada objeto.

Sobre as variáveis velocidade e distancia, essa ultima eu mudei para float, pois faz mais sentido (e se a distancia não for um inteiro, como em 99% das vezes?).

Quanto ao tempo gasto,

float tempo_gasto_1 = (bus1.calculaTempo(103) / 60)/60;

fiz a conversão de segundos para horas no momento de atribuição da variável, mas o ideal seria implementar no próprio método um algoritmo para formatar para o formato hh:mm, e o ideal é fazer todas as contas nas unidades SI (metros, segundos) e depois fazer as conversões necessárias.

Um bom exercício seria deixar os atributos da classe como private (encapsulamento) , adicionar métodos set/get para mudar as características do objeto (como mudar o destino após o termino de uma viagem e atribuir uma nova distancia aproximada).

Com um método getDistancia() por exemplo, as linhas

bus1.calculaTempo(287);

ficariam de uma forma mais geral

bus1.calculaTempo(bus1.getDistancia());

e adequando o código adequadamente bastaria uma chamada

bus1.calculaTempo();

pois a distancia seria uma propriedade do objeto, portanto inerente a ele e sem necessidade de ser passado como parâmetro ou ser obtido por meio de um get e logo após ser passado novamente para um método do objeto, entende todo o caminho que o valor da distância percorre em vão indo e voltando? Mas deixei dessa maneira para estimula-lo a perceber o que está acontecendo.

public class Onibus {

    int id;
    String rota;
    String origem;
    String destino;
    int horaPartida;
    int minutoPartida;
    float distancia; // distancia em km
    int TempoViagem;
    
    // velocidade em km/h convertida para metros por segundo
    float velocidade = (80 * 1000) / (60 * 60); // 22.222222 m/s

    public Onibus(int id, String rota, String origem, String destino, int horaPartida, int minutoPartida, float distancia) {
        /*
        this.id = 354;
        this.rota = "POA‐LJO";
        this.origem = "Lajeado";
        this.destino = "Torres ";
        this.horaPartida = 9;
        this.minutoPartida = 0;
        this.distancia = 359;
        */
        
        this.id = id;
        this.rota = rota;
        this.origem = origem;
        this.destino = destino;
        this.horaPartida = horaPartida;
        this.minutoPartida = minutoPartida;
        this.distancia = distancia; 

    }

    public Onibus(int id, String origem, String destino, float distancia) {
        /*
        this.id = 343;
        this.origem = "Lajeado";
        this.destino = "Progresso";
        this.distancia = 63;
        */
        
        this.id = id;
        this.origem = origem;
        this.destino = destino;
        this.distancia = distancia;
        
    }
    
    float calculaTempo(float distancia) {
        
        //converter km para m
        distancia *= 1000;
        return distancia/velocidade; // tempo em segundos!
        
    }
    

    public static void main(String[] args) {

        Onibus bus1 = new Onibus(1, "Lajeado", "Canoas", 103);
        float tempo_gasto_1 = (bus1.calculaTempo(103) / 60)/60; // convertendo segundos em horas!
        Onibus bus2 = new Onibus(2, "EST‐TOR", "Estrela", "Torres", 10, 30, 287);
        float tempo_gasto_2 = (bus2.calculaTempo(287) / 60)/60; // convertendo segundos em horas!
        
        System.out.println("Distancia percorrida pelo onibus 1: " + 103 + " km.");
        System.out.println("Tempo gasto: " + tempo_gasto_1 + " horas");
        
        System.out.println("Distancia percorrida pelo onibus 1: " + 287 + " km.");
        System.out.println("Tempo gasto: " + tempo_gasto_2 + " horas");

    }

}
1 curtida

Entendi oq vc quis dizer, vou implementar agora mesmo.
Muito obg por tirar minhas duvidas

1 curtida

Qualquer coisa só perguntar amigo

1 curtida

Se o método é invocado sobre a instância bus1 para que passar um atributo dessa mesma instância como parâmetro?
Deveria ser só bus1.calculaTempo();

Para calcular o consumo, precisa saber quantos litros havia no tanque na partida e quantos litros restaram no tanque ao chegar ao destino.

tempo = velocidade / distância

Se o método é invocado sobre a instância bus1 para que passar um atributo dessa mesma instância como parâmetro?
Deveria ser só `bus1.calculaTempo();

Foi isso que eu falei pra ele aqui