| | |
| | | return ints; |
| | | } |
| | | |
| | | //获取最近并在当前位置前边的位置 |
| | | public static Integer LatelyAndLessThan(List<BasDevpPosition> devpPosition, long nowPosition){ |
| | | // //获取最近并在当前位置前边的位置1000000===>10000==>0==>1000000 |
| | | // public static Integer LatelyAndLessThan(List<BasDevpPosition> devpPosition, long nowPosition,long perimeter){ |
| | | // Integer result = 0; |
| | | // long Difference = perimeter; |
| | | // for (BasDevpPosition positions : devpPosition){ |
| | | // Long position = positions.getPlcPosition(); |
| | | // if (position<=nowPosition){ |
| | | // if ((nowPosition-position) < Difference){ |
| | | // Difference = nowPosition-position; |
| | | // result = positions.getDevNo(); |
| | | // } |
| | | // } else { |
| | | // if ((nowPosition-(position - perimeter)) < Difference){ |
| | | // Difference = nowPosition-(position - perimeter); |
| | | // result = positions.getDevNo(); |
| | | // } |
| | | // } |
| | | // } |
| | | // return result; |
| | | // } |
| | | //获取最近并在当前位置前边的位置 0==>1000===>1000000==>0 |
| | | public static Integer LatelyAndLessThan(List<BasDevpPosition> devpPosition, long nowPosition,long perimeter){ |
| | | Integer result = 0; |
| | | long Difference = 1737000L; |
| | | long Difference = perimeter; |
| | | for (BasDevpPosition positions : devpPosition){ |
| | | Long position = positions.getPlcPosition(); |
| | | if (position<=nowPosition){ |
| | | if ((nowPosition-position) < Difference){ |
| | | Difference = nowPosition-position; |
| | | if (position >= nowPosition){ |
| | | if ((position-nowPosition) < Difference){ |
| | | Difference = position-nowPosition; |
| | | result = positions.getDevNo(); |
| | | } |
| | | } else { |
| | | if ((nowPosition-(position - 1737000L)) < Difference){ |
| | | Difference = nowPosition-(position - 1737000L); |
| | | if (perimeter - (nowPosition - position) < Difference){ |
| | | Difference = perimeter - (nowPosition - position); |
| | | result = positions.getDevNo(); |
| | | } |
| | | } |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | // //获取最近并在当前位置后边的位置 1000000===>10000==>0==>1000000 |
| | | // public static Integer LatelyAndLessThanWcs(List<BasDevpPosition> devpPosition, long nowPosition,long perimeter){ |
| | | // Integer result = 0; |
| | | // Integer integer = LatelyAndLessThan(devpPosition, nowPosition,perimeter); |
| | | // for (BasDevpPosition basDevpPosition:devpPosition){ |
| | | // if (basDevpPosition.getDevNo().equals(integer)){ |
| | | // if (basDevpPosition.getDevNo() == 101){ |
| | | // result = 133; |
| | | // } |
| | | // break; |
| | | // } |
| | | // result = basDevpPosition.getDevNo(); |
| | | // } |
| | | // return result; |
| | | // } |
| | | //获取最近并在当前位置后边的位置 0==>1000===>1000000==>0 |
| | | public static Integer LatelyAndLessThanWcs(List<BasDevpPosition> devpPosition, long nowPosition,long perimeter){ |
| | | Integer result = -1; |
| | | Integer integer = LatelyAndLessThan(devpPosition, nowPosition,perimeter); |
| | | for (BasDevpPosition basDevpPosition:devpPosition){ |
| | | if (basDevpPosition.getDevNo().equals(integer)){ |
| | | if (basDevpPosition.getDevNo() == 134){ |
| | | result = 101; |
| | | } |
| | | break; |
| | | } |
| | | result = basDevpPosition.getDevNo(); |
| | | } |
| | | return result == -1? 101 : result; |
| | | } |
| | | // //获取最近并在当前位置前边的位置 |
| | | // public static Long LatelyAndLessThan(long[] devpPosition,long nowPosition){ |
| | |
| | | // return result; |
| | | // } |
| | | |
| | | //获取最近并在当前位置后边的位置 |
| | | public static Integer LatelyAndGreaterThan(List<List<Long>> sitePosition, long nowPosition){ |
| | | int result = 0; |
| | | long Difference = 1737000L; |
| | | // //获取最近并在当前位置后边的位置 1000000===>10000==>0==>1000000 |
| | | // public static Integer LatelyAndGreaterThan(List<List<Long>> sitePosition, long nowPosition ,long perimeter){ |
| | | // int result = 0; |
| | | // long Difference = perimeter; |
| | | // for (List<Long> rgvPositions: sitePosition){ |
| | | // Long position = rgvPositions.get(1); |
| | | // if (position>nowPosition){ |
| | | // if ((position - nowPosition) < Difference){ |
| | | // Difference = position - nowPosition; |
| | | // result = rgvPositions.get(0).intValue(); |
| | | // } |
| | | // } else { |
| | | // if ((perimeter - (nowPosition - position)) < Difference){ |
| | | // Difference = perimeter - (nowPosition - position); |
| | | // result = rgvPositions.get(0).intValue(); |
| | | // } |
| | | // } |
| | | // } |
| | | // return result; |
| | | // } |
| | | |
| | | //获取最近并在当前位置后边的位置 0==>1000===>1000000==>0 |
| | | public static Integer LatelyAndGreaterThan(List<List<Long>> sitePosition, long nowPosition ,long perimeter){ |
| | | int result = -1; |
| | | long Difference = perimeter; |
| | | for (List<Long> rgvPositions: sitePosition){ |
| | | Long position = rgvPositions.get(1); |
| | | if (position>nowPosition){ |
| | | if ((position - nowPosition) < Difference){ |
| | | Difference = position - nowPosition; |
| | | if (position <= nowPosition){ |
| | | if ((nowPosition - position) < Difference){ |
| | | Difference = nowPosition - position; |
| | | result = rgvPositions.get(0).intValue(); |
| | | } |
| | | } else { |
| | | if ((1737000L - (nowPosition - position)) < Difference){ |
| | | Difference = 1737000L - (nowPosition - position); |
| | | if ((perimeter - (nowPosition - position)) < Difference){ |
| | | Difference = perimeter - (nowPosition - position); |
| | | result = rgvPositions.get(0).intValue(); |
| | | } |
| | | } |
| | |
| | | // } |
| | | |
| | | |
| | | //获取最近并在当前位置前边的位置 0==>1000===>1000000==>0 |
| | | public static Double LatelyAndLessThan(long devPosition,long rgvPosition,long perimeter){ |
| | | long Difference = perimeter; |
| | | if (devPosition >= rgvPosition){ |
| | | // if ((devPosition-rgvPosition) < Difference){ |
| | | Difference = devPosition-rgvPosition; |
| | | // } |
| | | } else { |
| | | // if (perimeter - (rgvPosition - devPosition) < Difference){ |
| | | Difference = perimeter - (rgvPosition - devPosition); |
| | | // } |
| | | } |
| | | return Double.valueOf(Difference); |
| | | } |
| | | |
| | | public static int calculateShortestDistanceDistance(List<Integer> data, int a, int b) { |
| | | Result result = calculateShortestDistance(data, a, b); |
| | | return result.distance; |
| | | } |
| | | |
| | | public static List<Integer> calculateShortestDistancePassedData(List<Integer> data, int a, int b) { |
| | | Result result = calculateShortestDistance(data, a, b); |
| | | return result.passedData; |
| | | } |
| | | |
| | | // public static String calculateShortestDistanceDirection(List<Integer> data, int a, int b) { |
| | | // Result result = calculateShortestDistance(data, a, b); |
| | | // return result.direction; |
| | | // } |
| | | |
| | | public static boolean calculateShortestDistanceDirection(List<Integer> data, int a, int b) { |
| | | Result result = calculateShortestDistance(data, a, b); |
| | | return result.direction.equals("向前走(顺时针)"); |
| | | } |
| | | |
| | | |
| | | public static void main(String[] args) { |
| | | List<Integer> data = new ArrayList<>(); |
| | | // 用 List<Integer> 初始化数据 |
| | | for (int i = 1; i <= 9; i++) { |
| | | data.add(i); |
| | | } |
| | | |
| | | int a = 3; // 起点 |
| | | int b = 3; // 终点 |
| | | |
| | | Result result = calculateShortestDistance(data, a, b); |
| | | System.out.println("最近的距离是: " + result.distance); |
| | | System.out.println("经过的数据: " + result.passedData); |
| | | System.out.println("方向: " + result.direction); |
| | | } |
| | | |
| | | public static Result calculateShortestDistance(List<Integer> data, int a, int b) { |
| | | int length = data.size(); |
| | | int indexA = data.indexOf(a); |
| | | int indexB = data.indexOf(b); |
| | | |
| | | if (indexA == -1 || indexB == -1) { |
| | | throw new IllegalArgumentException("列表中未找到指定的元素"); |
| | | } |
| | | |
| | | // 顺时针方向的距离及经过的数据 |
| | | List<Integer> clockwiseData = new ArrayList<>(); |
| | | int clockwiseDistance = (indexB - indexA + length) % length; |
| | | for (int i = 0; i <= clockwiseDistance; i++) { |
| | | clockwiseData.add(data.get((indexA + i) % length)); |
| | | } |
| | | |
| | | // 逆时针方向的距离及经过的数据 |
| | | List<Integer> counterClockwiseData = new ArrayList<>(); |
| | | int counterClockwiseDistance = (indexA - indexB + length) % length; |
| | | for (int i = 0; i <= counterClockwiseDistance; i++) { |
| | | counterClockwiseData.add(data.get((indexA - i + length) % length)); |
| | | } |
| | | |
| | | // 比较距离并返回结果 |
| | | if (clockwiseDistance <= counterClockwiseDistance) { |
| | | return new Result(clockwiseDistance, clockwiseData, "向前走(顺时针)"); |
| | | } else { |
| | | return new Result(counterClockwiseDistance, counterClockwiseData, "向后走(逆时针)"); |
| | | } |
| | | } |
| | | |
| | | // 用于返回结果的类 |
| | | static class Result { |
| | | public int distance; |
| | | public List<Integer> passedData; |
| | | public String direction; |
| | | |
| | | public Result(int distance, List<Integer> passedData, String direction) { |
| | | this.distance = distance; |
| | | this.passedData = passedData; |
| | | this.direction = direction; |
| | | } |
| | | } |
| | | |
| | | } |