package lujing; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * 保存X,Y坐标的工具类 * 坐标单位:米,精确到小数点后2位小数 */ public class SavaXyZuobiao { // 坐标集合,使用线程安全的List private static final List COORDINATES = Collections.synchronizedList(new ArrayList<>()); // 保存状态标志 private static volatile boolean isSaving = false; // 数字格式化器,用于保留2位小数 private static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat("0.00"); // 私有构造方法,防止实例化 private SavaXyZuobiao() { throw new UnsupportedOperationException("这是一个工具类,不能实例化"); } /** * 添加坐标到集合中(仅在保存状态下) * @param x X坐标(米) * @param y Y坐标(米) */ public static void addCoordinate(double x, double y) { if (isSaving) { // 格式化坐标,保留2位小数 double formattedX = Double.parseDouble(DECIMAL_FORMAT.format(x)); double formattedY = Double.parseDouble(DECIMAL_FORMAT.format(y)); double[] coordinate = {formattedX, formattedY}; synchronized (COORDINATES) { COORDINATES.add(coordinate); } } } /** * 获取坐标集合的字符串表示 * 格式:X1,Y1;X2,Y2;...;Xn,Yn * @return 格式化后的坐标字符串 */ public static String getCoordinatesString() { if (COORDINATES.isEmpty()) { return ""; } StringBuilder sb = new StringBuilder(); synchronized (COORDINATES) { for (int i = 0; i < COORDINATES.size(); i++) { double[] coordinate = COORDINATES.get(i); sb.append(DECIMAL_FORMAT.format(coordinate[0])) .append(",") .append(DECIMAL_FORMAT.format(coordinate[1])); if (i < COORDINATES.size() - 1) { sb.append(";"); } } } return sb.toString(); } /** * 开始保存坐标 */ public static void startSaving() { isSaving = true; } /** * 暂停保存坐标 */ public static void pauseSaving() { isSaving = false; } /** * 获取当前保存状态 * @return true表示正在保存,false表示已暂停 */ public static boolean isSaving() { return isSaving; } /** * 清空坐标集合中的所有数据 */ public static void clearCoordinates() { synchronized (COORDINATES) { COORDINATES.clear(); } } /** * 获取当前保存的坐标数量 * @return 坐标数量 */ public static int getCoordinateCount() { synchronized (COORDINATES) { return COORDINATES.size(); } } /** * 获取所有坐标的列表(副本,防止外部修改内部数据) * @return 坐标列表的副本 */ public static List getAllCoordinates() { synchronized (COORDINATES) { List copy = new ArrayList<>(COORDINATES.size()); for (double[] coord : COORDINATES) { copy.add(new double[]{coord[0], coord[1]}); } return copy; } } }