From fae9408de2f8fc192de1a41ed1ce83d53086861e Mon Sep 17 00:00:00 2001 From: iMoHax Date: Wed, 15 Jul 2015 12:31:58 +0300 Subject: [PATCH] fix throw not exists paths --- .../main/java/ru/trader/analysis/TransitPath.java | 12 +++++++----- .../main/java/ru/trader/analysis/VendorsGraph.java | 10 +++++++++- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/ru/trader/analysis/TransitPath.java b/core/src/main/java/ru/trader/analysis/TransitPath.java index a8cbefc..4f3ff48 100644 --- a/core/src/main/java/ru/trader/analysis/TransitPath.java +++ b/core/src/main/java/ru/trader/analysis/TransitPath.java @@ -39,6 +39,8 @@ public class TransitPath { } else { fuel = refill(edges, entries.size()-1); } + if (fuel < 0) + throw new IllegalStateException("Is not exists path"); refillCount++; } else { fuel -= fuelCost; @@ -62,14 +64,14 @@ public class TransitPath { } double remain = max != -1 ? Math.min(max, e.getRefill()) : e.getRefill(); double fuelCost = e.getFuelCost(remain); + double fuel = updateFuelCost(edges, i+1, startIndex, remain-fuelCost); + if (fuel < 0){ + continue; + } this.fuelCost += fuelCost - ce.getFuelCost(); ce.setFuelCost(fuelCost); ce.setRefill(remain); - remain = updateFuelCost(edges, i+1, startIndex, remain-fuelCost); - if (remain < 0){ - continue; - } - return remain; + return fuel; } if (max == -1 || e.getMaxFuel() < max){ max = e.getMaxFuel(); diff --git a/core/src/main/java/ru/trader/analysis/VendorsGraph.java b/core/src/main/java/ru/trader/analysis/VendorsGraph.java index c50fd70..e28539e 100644 --- a/core/src/main/java/ru/trader/analysis/VendorsGraph.java +++ b/core/src/main/java/ru/trader/analysis/VendorsGraph.java @@ -186,6 +186,10 @@ public class VendorsGraph extends ConnectibleGraph { break; } path = path.add(cEdge); + if (path.getMinFuel() > path.getMaxFuel()){ + LOG.trace("Path inaccessible"); + break; + } if (!source.equals(target)){ addEdge(source, target, path); } @@ -235,6 +239,10 @@ public class VendorsGraph extends ConnectibleGraph { break; } path = path.add(cEdge); + if (path.getMinFuel() > path.getMaxFuel()){ + LOG.trace("Path inaccessible"); + break; + } if (!source.equals(target)){ addEdge(source, target, path); } @@ -430,7 +438,7 @@ public class VendorsGraph extends ConnectibleGraph { int jumps = source.getEntry().getPlace().equals(target.getEntry().getPlace())? 0 : 1; int lands = 1; double fuel = fuelCost; if (path != null){ - jumps = path.size(); fuel = getFuelCost(); + jumps = path.size()-1; fuel = getFuelCost(); lands += path.getRefillCount(); } double profit = getProfit();