Почему мой код Javafx неправильно идентифицирует и подключает мои максимальные точки?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Почему мой код Javafx неправильно идентифицирует и подключает мои максимальные точки?

Сообщение Anonymous »

Я работал над этим в течение нескольких дней и не могу понять это (это школьный проект). < /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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»