자바 t초 후 위치 계산 코드 질문

자바 t초 후 위치 계산 코드 질문

작성일 2024.04.19댓글 2건
    게시물 수정 , 삭제는 로그인 필요

자바 언어로
x m/s로 n m구간을 반복해서 이동할 때, t초 후 위치를 구하는 코드를 구현하고 싶습니다.
단 이 때 n만큼 이동 했으면 y m/s만큼 x값이 감소하면서 진행되며 x값은 0 미만으로 떨어지지 않습니다.
제가 해석한 방식은 
n미터 이동 후 x - y의 속도로 n만큼 이동하며 총 이동거리 - n 거리를 통해 제가 만약 t값을 1이라고 입력하면 현재 위치 값을 나타내고 싶었는데 코드 구현이 너무 힘듭니다. 소수점 2자리까지 출력하여 
값을 출력하고 싶습니다



profile_image 익명 작성일 -

코드를 작성하기 전에, 계산의 가정을 정리해보면

  1. 시작 속도: x m/s

  2. 거리 간격: n 미터

  3. 속도 감소: y m/s

  4. 최소 속도: 0 m/s

  5. 경과 시간: t 초

속도가 n 미터 이동할 때마다 y m/s씩 감소하므로, 이동할 때마다 시간과 현재 위치를 계산해야 합니다.

속도가 감소하는 조건은 x - y가 0 이상일 때만 적용됩니다.

만약 속도가 0이 되면, 그 이후에는 위치가 변하지 않습니다.

아래는 이 로직을 반영한 자바 코드 예시입니다,

public class SpeedCalculation {

public static void main(String[] args) {

double x = 10.0; // 초깃값 m/s

int n = 50; // 구간 m

double y = 2.0; // 속도 감소 m/s

double t = 1; // 시간 s

System.out.printf("%.2f\n", calculatePosition(x, n, y, t));

}

public static double calculatePosition(double initialSpeed, int distanceInterval, double speedDecrease, double time) {

double currentSpeed = initialSpeed;

double currentPosition = 0.0;

double elapsedTime = 0.0;

while (elapsedTime < time) {

if (currentSpeed <= 0) {

break; // 속도가 0이면 더 이상 움직이지 않음

}

double timeToTravelInterval = distanceInterval / currentSpeed; // 현재 속도로 구간을 이동하는데 걸리는 시간

if (elapsedTime + timeToTravelInterval > time) {

timeToTravelInterval = time - elapsedTime; // 남은 시간보다 이동 시간이 길 경우, 남은 시간만큼만 이동

}

currentPosition += currentSpeed * timeToTravelInterval; // 현재 속도로 이동 거리 계산

elapsedTime += timeToTravelInterval;

currentSpeed -= speedDecrease; // 속도 감소

if (currentSpeed < 0) {

currentSpeed = 0; // 속도가 0 미만이면 0으로 설정

}

}

return currentPosition;

}

}

위의 코드에서 calculatePosition 함수는 주어진 속도, 구간, 속도 감소, 시간에 따라 최종 위치를 계산해주고

main 메서드에서는 예제 값들을 설정하고 결과를 출력하도록 했습니다.

또한 결과는 소수점 두 자리까지 표시하도록 했습니다.

위의 코드를 기반으로 추가 요구사항이 있다면 그에 맞게 변수를 조정하여 사용하시면 됩니다.

profile_image 익명 작성일 -

예시:

import java.util.Scanner;public class PositionCalculator { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 변수 입력 double x = sc.nextDouble(); // 초기 속도(m/s) double n = sc.nextDouble(); // 이동 거리(m) double y = sc.nextDouble(); // 감소 속도(m/s) double t = sc.nextDouble(); // 시간(초) // 위치 계산 double distance = 0; double position = x * t; for (int i = 0; i < Math.ceil(n / t); i++) { if (distance < n) { distance += t * x; } else { distance += Math.min(n - distance, t * (x - y)); position -= Math.max(0, distance - n); } } // 결과 출력 System.out.printf("%.2f", position); }}

자바 코드 질문있습니다.

... 출처 : https://sangki19.tistory.com/entry/자바-생성자-규칙-상속-시-Super-위치 super(40);가 b = 20; 아래에 위치할 경우 오류가 발생하는 이유는 자바의...

자바 코드 관련 질문있습니다.

... 3, 5 등 후에 추가한 값은 잘 걸러지지 않습니다. 9도 소수로 들어가구요 어디가 문제인가요??? 소수 계산 알고리즘은 에라토스테네스의 체 알고리즘을 많이 사용합니다. <

자바 증감연산자 질문

... 이렇게 계산하는 방법이 맞나요? 챗지피티 답변이 부정확한거같아 질문합니다 안녕하세요. 쉽게 설명드릴께요. x = 10; y = x++ + ++x; 이런 코드가 있다고 할때, 이...



    test ad