이 프로그램은 다른 프로그램 (강사가 제공 한 것으로, 나는 그녀의 코드가 문제가 아님)으로 읽을 수있는 일련의 정수를 출력하여 줄 패턴을 그리기위한 것입니다.이상한 결과를내는 프로그램
의도 한 패턴은 각 모서리에서 시작하여 가운데 방향으로 시계 반대 방향으로 회전하는 4 개의 곡선입니다. 각 운동의 길이가 한 점과 다음 점 사이의 거리보다 클 때 멈 춥니 다.
은 다음과 같습니다, 불행히도 프로그램을를 하나이 거리가 첫번째 포인트에 도달하면 중지하고 다른 세를 완료 할 수없는, 또는 정지 할 때 네 번째 마지막 지점은이 시점에 도달했지만, 그 사이에 아무 의미가없는 다른 임의의 선이 출력됩니다.
은 다음과 같습니다
어떤 통찰력이 시점에서 감상 할 수있다. 코드는 다음과 같습니다. 당신이 "굼벵이"의 최종 X-Y 위치를 나타 내기 위해 int
를 사용하고 있다는 사실로 인해 (주로), 귀하의 계산에 심각한 반올림/절단 오류에서 고통처럼 내게 보이는
import java.util.Scanner;
import java.io.*;
import java.awt.Point;
public class Slugs {
public static void main(String[] args) {
Scanner input = null;
try {
input = new Scanner(new File("slug_details.txt"));
}
catch (java.io.FileNotFoundException e) {
System.out.println("Sorry, file not found.");
System.exit(-1);
}
String filename = input.next();
int boxSize = input.nextInt();
int d = input.nextInt();
Point[]slugs = new Point[4];
slugs[0] = new Point(0, 0);
slugs[1] = new Point(0, boxSize);
slugs[2] = new Point(boxSize, boxSize);
slugs[3] = new Point(boxSize, 0);
PrintStream output = null;
try {
output = new PrintStream(new File(filename));
}
catch (java.io.FileNotFoundException e) {
System.out.println("Sorry, file could not be created.");
System.exit(-1);
}
output.println(boxSize + " " + boxSize);
moveSomeSlugs(slugs, d, output);
}
public static void moveSomeSlugs(Point[]slugs, double d, PrintStream output){
/* move slugs distance d until d >
*/
double distance = 0.0;
double ratio = 0.0;
for (int i = 0; i<(slugs.length); i++){
distance = Math.sqrt((Math.pow((slugs[(i+1)%4].x-slugs[i].x), 2))+(Math.pow((slugs[(i+1)%4].y-slugs[i].y), 2)));
ratio = d/distance;
}
while (d <= distance){
for (int i = 0; i<4; i++){
double xmoveDist = (slugs[(i+1)%4].x-slugs[i].x)*ratio;
double ymoveDist = (slugs[(i+1)%4].y-slugs[i].y)*ratio;
output.print (Math.abs(slugs[i].x) + " " + Math.abs(slugs[i].y) + " ");
slugs[i].x += xmoveDist;
slugs[i].y += ymoveDist;
output.println (Math.abs(slugs[i].x) + " " + Math.abs(slugs[i].y));
distance = Math.sqrt((Math.pow((slugs[(i+1)%4].x-slugs[i].x), 2))+(Math.pow((slugs[(i+1)%4].y-slugs[i].y), 2)));
ratio = d/distance;
if (d > distance && i == slugs.length-1){
break;
}
}
}
}
}
원하는 출력과 현재 출력을 포함하도록 게시물을 편집 할 수 있습니까? – Pokechu22
완료. 이미지를 추가 할 수 없어 명성이 너무 낮습니까? –
입력 예는 무엇입니까? 귀하의 민달팽이가 중간에 도달했을 때 멈추지 않고있는 것처럼 보입니다. –