Correção do código

5 respostas
P

Boa noite a todos, estou estudando pelo livro “BigJava” e teve um exercício que fiquei na dúvida se é isto mesmo:

public class BaladeCanhao {

    private static final double deltaT = 0.01;
    private double velocidade;
    private double distancia;
    private String mensagem;

    public BaladeCanhao(double aVelocidade) {
        velocidade = aVelocidade;
        velocidade -= 9.81 * deltaT;
        distancia += velocidade * deltaT;
    }

    public String imprime() {
        int contador = 1;
        while (distancia >= 0) {
            if (contador % 100 == 0) {
                velocidade -= 9.81 * deltaT;
                distancia += velocidade * deltaT;
                mensagem = "A velocidade atual é " + velocidade + " e a distância atual é " + distancia;
                System.out.println(mensagem);
            } else {
                velocidade -= 9.81 * deltaT;
                distancia += velocidade * deltaT;
            }
                contador++;
        }
        return mensagem;
    }
}

Recebo um valor “velocidade” que será 100 e por sua vez atualiza a “distancia” e a “velocidade”. Enquanto a “distancia” for positiva vou fazendo atualizações da “distancia” e da “velocidade”, no entanto, toda vez que atingir um “deltaT” = 1, ou seja, depois de executar as atualizações 100 vezes, preciso imprimir os atuais valores da “velocidade” e da “distancia”.

Gostaria que avaliassem a sintaxe da minha solução.

Obrigado a todos

5 Respostas

Andre_Rosa

Mas qual é a sua dúvida em relação ao código? Por algum motivo, ele não compila? Há algum erro?

P

Compilou sim. A questão é que gostaria que alguém avaliasse a forma como implementei, se a escrita está boa…

Obrigado pela atenção

adriano_si

A questão é: fez o que você queria ??? Se sim, é sinal de que o seu código está “certo”…

Precisaríamos apenas fazer uma avaliação de onde ele pode melhorar…

Abs []

P

Fazer fez.

Vou dar uma analisada mais apurada…

Obrigado a todos

P

Em outra questão foi pedido que refizesse a classe “BaladeCanhao”, refiz o código, só que para os valores de “angulo” entre 0 e 90, não sai nada impresso na tela.

Alguém saberia me dizer o porque?

public class BaladeCanhao {

    private static final double deltaT = 0.01;
    private double velocidadeInicial;
    private double velocidadeVertical;
    private double velocidadeHorizontal;
    private double distanciaVertical;
    private double distanciaHorizontal;
    private double angulo;
    private String mensagem;

    public BaladeCanhao(double aVelocidade, double oAngulo) {
        velocidadeInicial = aVelocidade;
        angulo = oAngulo;
        velocidadeVertical = velocidadeInicial * Math.sin(angulo) - 9.81 * deltaT;
        velocidadeHorizontal = velocidadeInicial * Math.cos(angulo);
        distanciaVertical += velocidadeVertical * deltaT;
        distanciaHorizontal += velocidadeHorizontal * deltaT;
    }

    public String imprime() {
        int contador = 1;
        if (angulo == 90) {
            while (distanciaVertical >= 0) {
                if (contador % 100 == 0) {
                    velocidadeVertical = velocidadeVertical * Math.sin(angulo) - 9.81 * deltaT;
                    distanciaVertical += velocidadeVertical * deltaT;
                    mensagem = "O projétil está subindo, e sua velocidade atual é " + velocidadeVertical + " e a distância atual é " + distanciaVertical;
                    System.out.println(mensagem);
                } else {
                    velocidadeVertical = velocidadeVertical * Math.sin(angulo) - 9.81 * deltaT;
                    distanciaVertical += velocidadeVertical * deltaT;
                }
                contador++;
            }
        } else if (0 <= angulo && angulo < 90) {
            while (distanciaVertical >= 0) {
                if (contador % 100 == 0) {
                    velocidadeVertical = velocidadeInicial * Math.sin(angulo) - 9.81 * deltaT;
                    velocidadeHorizontal = velocidadeInicial * Math.cos(angulo);
                    distanciaVertical += velocidadeVertical * deltaT;
                    distanciaHorizontal += velocidadeHorizontal * deltaT;
                    mensagem = "O projétil desloca-se horizontalmente e verticalmente," + " e sua velocidade vertical atual é " + velocidadeVertical + " e a horizontal é " + velocidadeHorizontal + ", e a distância vertical atual é " + distanciaVertical + " e a horizontal é " + distanciaHorizontal;
                    System.out.println(mensagem);
                } else {
                    velocidadeVertical = velocidadeInicial * Math.sin(angulo) - 9.81 * deltaT;
                    velocidadeHorizontal = velocidadeInicial * Math.cos(angulo);
                    distanciaVertical += velocidadeVertical * deltaT;
                    distanciaHorizontal += velocidadeHorizontal * deltaT;
                }
                contador++;
            }
        } else {
            mensagem = "Forneça um valor de ângulo entre 0 e 90 graus.";
            System.out.println(mensagem);
        }
        return mensagem;
        }
    }

Obrigado mais uma vez

Criado 4 de janeiro de 2011
Ultima resposta 4 de jan. de 2011
Respostas 5
Participantes 3