Olá pessoal!
Sou novo em Java e tenho em base ao meu estudo o Big java do Cay Horstmann. Estou realizando seu exercícios de programação, porém alguns deles não estou conseguindo resolver. Então peço a ajuda de vocês para que possam ajudar a resolver esses exercícios. Se não conseguem resolver pelo menos de dicas de como fazer.
Bom, vou pôr alguns agora e com o tempo vou acrescentando mais. Obrigado!
P5.5 - Escreva um programa que desenhe um círculo com raio 100 e centro (110, 120). Peça que o usuário especifique as coordenadas x e y de um ponto. Se o ponto estiver dentro do círculo exiba a mensagem "Parabéns". Caso contrário, exiba a mensagem "Você perdeu". No seu exercício, defina uma classe Circulo e um méto boolean isInside(Point2D.Double p).O que já fiz:
Não sei como faze o método isInside. Devo usar uma fómula matemática para saber se está dentro ou fora? Me ajudem, por favor.import java.applet.Applet; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Color; import java.awt.Font; import java.awt.geom.Ellipse2D; import java.awt.geom.Point2D; import javax.swing.JOptionPane; public class Circulo extends Applet { private double x; private double y; public Circulo() { String input = JOptionPane.showInputDialog("x:"); x = Integer.parseInt(input); input = JOptionPane.showInputDialog("y:"); y = Integer.parseInt(input); } public void paint(Graphics g) { Graphics2D g2 = (Graphics2D)g; Point2D.Double p = new Point2D.Double(x,y); //desenha círculo Ellipse2D.Double circulo = new Ellipse2D.Double(10, 10, 100, 100); g2.draw(circulo); //desenha ponto Ellipse2D.Double ponto = new Ellipse2D.Double(x - 1, y - 1, 2, 2); g2.draw(ponto); //desenha mensagem Font font = new Font("Monospaced", Font.PLAIN, 12); String message = ""; if(isInside(p)) { message = "Parabéns"; g2.drawString(message, 10, 130); } else { message = "Você perdeu"; g2.drawString(message, 10, 130); } } public boolean isInside(Point2D.Double p) { ... } }
P6.3 - Vôo de um projetil. Suponha que uma bala de canão seja projetada verticalmente no ar a uma velocidade inicial v0. Qualquer livro de matemática informará que a posição da bala depois de t segundos é s(t) = -0,5 x g x t x t x v0 x t. onde g = 9,81 m/(s * s), a força da gravidade da Terra. Nenhum livro de matemática menciona por que alguém iria querer realizar essa experiência obviamente perigosa; assim, nós a realizaremos na segurança do computador. Na verdade, vamos confirmar o teorema através de cálculos com uma simulação. Na nossa simulação, vamos considerar a maneira como a bala se move em intervalos muito curtos de tempo deltaT. Em um intervalo curto de tempo, a velocidade v é quase constante, e podemos calcular a distância que a bala se move como deltaS = v x deltaT. No nosso programa, simplesmente vamos configurare atualizar a posição pordouble deltaT = 0.01;A velocidade muda constantemente - na verdade, ela reduz com a força gravitacional da terra. Em um intervalo curto de tempo, v diminui de cordo com g x deltaT e devemos manter a velocidade atualizada comos = s + v * deltaT;Na próxima iteração, usa-se a nova velocidade para atualizar a distância. Agora execute a simulação até que a bala caia de volta na terra. Obtenha a velocidade inicial como uma entrada(100 m/s é um bom valor). Atualize a posição e a velocidade 100 vezes por segundo, mas imprima a posição somente a cada segundo completo. Utilize uma classe BalaDeCanhao.v = v - g * deltaT;O que já fiz:
Estou com problema noimport java.text.NumberFormat; public class BalaDeCanhao { private double v; private double deltaT; private double g; private double s; public BalaDeCanhao() { v = 100; deltaT = 0.01; g = 9.81; s = 0; } public void calculaPosicao() { NumberFormat formatter = NumberFormat.getNumberInstance(); formatter.setMaximumFractionDigits(2); boolean done = false; while(!done) { s += v * deltaT; v += -g * deltaT; deltaT += 0.01; if(deltaT % 1 == 0) System.out.println("Posição: " + s + "Velocidade: " + v); if(s <= 0) done = true; deltaT = Double.parseDouble(formatter.format(deltaT)); } } }Alguém sabe me dizer o que há de errado com isso?deltaT = Double.parseDouble(formatter.format(deltaT));