Я работал над этим в течение нескольких дней и не могу понять это (это школьный проект). < /p>
Для этого проекта максимальная точка определяется как любой момент, который не имеет других моментов над ним или справа от него. Инструкции указывают, чтобы определить набор максимальных точек среди набора точек, отображаемых в окне Java. Все максимальные точки должны быть подключены строк. И это результат, который я получаю со своим кодом:
мой вывод, который неверный < /p>
Это набор точек, которые мне дали для использования и что должен создать правильный вывод образца прогона: < /p>
200.0 300.0
250.0 300.0
330.0 270.0
150.0 380.0
126.0 172.0
397.0 379.0
334.0 441.0
53.0 288.0
89.0 433.0
182.0 215.0
251.0 414.0
< /code>
Вот мой код: < /p>
main.java
//Main.java
package application;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
List
points = readPointsFromFile("points.txt");
MaximalPointsPane pane = new MaximalPointsPane(points);
Scene scene = new Scene(pane);
primaryStage.setTitle("Maximal Points Visualization");
primaryStage.setScene(scene);
primaryStage.show();
}
private List readPointsFromFile(String filename) {
List points = new ArrayList();
try (Scanner scanner = new Scanner(new File(filename))) {
while (scanner.hasNextDouble()) {
double x = scanner.nextDouble();
double y = scanner.nextDouble();
points.add(new Point(x, y));
}
} catch (FileNotFoundException e) {
System.out.println("File not found: " + filename);
}
return points;
}
public static void main(String[] args) {
launch(args);
}
}
< /code>
maximalpointspane.java
//MaximalPointsPane.java
package application;
import javafx.scene.layout.Pane;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Line;
import javafx.scene.paint.Color;
import javafx.scene.input.MouseButton;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class MaximalPointsPane extends Pane {
private List
points = new ArrayList();
public MaximalPointsPane(List initialPoints) {
this.points.addAll(initialPoints);
setPrefSize(500, 500);
draw();
setOnMouseClicked(event -> {
double x = event.getX();
double y = event.getY();
if (event.getButton() == MouseButton.PRIMARY) {
points.add(new Point(x, y)); // Add point
} else if (event.getButton() == MouseButton.SECONDARY) {
points.removeIf(p -> Math.hypot(p.getX() - x, p.getY() - y) < 10); // Remove closest point
}
draw();
});
}
private void draw() {
getChildren().clear();
// Draw points
for (Point p : points) {
Circle circle = new Circle(p.getX(), p.getY(), 4, Color.BLACK);
getChildren().add(circle);
}
// Find maximal points and draw connecting lines
List maximalPoints = findMaximalPoints();
for (int i = 0; i < maximalPoints.size() - 1; i++) {
Point p1 = maximalPoints.get(i);
Point p2 = maximalPoints.get(i + 1);
Line line = new Line(p1.getX(), p1.getY(), p2.getX(), p2.getY());
line.setStroke(Color.BLACK);
getChildren().add(line);
}
}
private List findMaximalPoints() {
List maximal = new ArrayList();
for (Point p1 : points) {
boolean isMaximal = true;
for (Point p2 : points) {
if (p1.isDominatedBy(p2)) {
isMaximal = false;
break;
}
}
if (isMaximal) maximal.add(p1);
}
Collections.sort(maximal);
return maximal;
}
}
< /code>
point.java
//Point.java
package application;
import java.util.Objects;
public class Point implements Comparable {
private final double x;
private final double y;
public Point(double x, double y) {
this.x = x;
this.y = y;
}
public double getX() {
return x;
}
public double getY() {
return y;
}
public boolean isDominatedBy(Point other) {
return (this.x < other.x && this.y
Подробнее здесь: https://stackoverflow.com/questions/794 ... mal-points
Почему мой код Javafx неправильно идентифицирует и подключает мои максимальные точки? ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение