5

I am writing a program that is based on the Travelling Salesman Problem. There are four cities in which the user determines its x and y coordinates. The salesman always starts at city1 and ends up at city1, so there are 6 possible routes. However, each route has an equivalent route, i.e route1 has the same distance asroute6. I have accounted for this. I've also tried to account for if (route1 or route6) and (route2 or route4) have the same distance. The program tells you that.

However, every time four or even all six routes have the same distance, the program just tells me that two out of the four or six routes have the shortest distance. This is what I need help with.

import java.util.Scanner; import java.lang.Math; public class CityDistancesProgram { public static void main(String[] args) { Scanner keyboard = new Scanner(System.in); //x and y coordinates of each city int x1, y1, x2, y2, x3, y3, x4, y4; //Variable for the distances of each route double route1, route2, route3, route4, route5, route6; //Since the distance from cityA to cityB is the same as the distance from cityB to cityA, //these are all the possible combinations of distances between each city double city1city2, city2city3, city3city4, city4city1, city2city4, city3city1; double city2city1, city3city2, city4city3, city1city4, city4city2, city1city3; double shortestRoute; System.out.println("Enter the value of each city's x-coordinate and y-coordinate"); System.out.println(" "); //First city System.out.println("City 1's x-coordinate:"); x1 = keyboard.nextInt(); System.out.println("City 1's y-coordinate:"); y1 = keyboard.nextInt(); //Second city System.out.println("City 2's x-coordinate:"); x2 = keyboard.nextInt(); System.out.println("City 2's y-coordinate:"); y2 = keyboard.nextInt(); //Third city System.out.println("City 3's x-coordinate:"); x3 = keyboard.nextInt(); System.out.println("City 3's y-coordinate:"); y3 = keyboard.nextInt(); //Fourth city System.out.println("City 4's x-coordinate:"); x4 = keyboard.nextInt(); System.out.println("City 4's y-coordinate:"); y4 = keyboard.nextInt(); System.out.println("City 1's coordinates are: (" + x1 + ", " + y1 +")"); System.out.println("City 2's coordinates are: (" + x2 + ", " + y2 +")"); System.out.println("City 3's coordinates are: (" + x3 + ", " + y3 +")"); System.out.println("City 4's coordinates are: (" + x4 + ", " + y4 +")"); //Computing all possible combinations of distance between each city city1city2 = Math.sqrt((x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2)); //distance from city1 to city2 city3city1 = Math.sqrt((x1 - x3)*(x1 - x3) + (y1 - y3)*(y1 - y3)); //distance from city1 to city3 city4city1 = Math.sqrt((x1 - x4)*(x1 - x4) + (y1 - y4)*(y1 - y4)); //distance from city4 to city1 city2city3 = Math.sqrt((x2 - x3)*(x2 - x3) + (y2 - y3)*(y2 - y3)); //distance from city2 to city3 city3city4 = Math.sqrt((x3 - x4)*(x3 - x4) + (y3 - y4)*(y3 - y4)); //distance from city3 to city4 city2city4 = Math.sqrt((x2 - x4)*(x2 - x4) + (y2 - y4)*(y2 - y4)); //distance from city2 to city4 city2city1 = city1city2; //distance from city2 to city1 city3city2 = city2city3; //distance from city3 to city2 city4city3 = city3city4; //distance from city4 to city3 city1city4 = city4city1; //distance from city1 to city4 city4city2 = city2city4; //distance from city4 to city2 city1city3 = city3city1; //distance from city1 to city3 //Computing the distance of each possible route route1 = city1city2 + city2city3 + city3city4 + city4city1; route2 = city1city2 + city2city4 + city4city3 + city3city1; route3 = city1city3 + city3city2 + city2city4 + city4city1; route4 = city1city3 + city3city4 + city4city2 + city2city1; route5 = city1city4 + city4city2 + city2city3 + city3city1; route6 = city1city4 + city4city3 + city3city2 + city2city1; System.out.println(" "); System.out.println("The first route has a total distance of " + route1 + " km"); System.out.println("The second route has a total distance of " + route2 + " km"); System.out.println("The third route has a total distance of " + route3 + " km"); System.out.println("The fourth route has a total distance of " + route4 + " km"); System.out.println("The fifth route has a total distance of " + route5 + " km"); System.out.println("The sixth route has a total distance of " + route6 + " km"); shortestRoute = Math.min(Math.min(route1, Math.min(route2,route3)), Math.min(route4,Math.min(route5,route6))); System.out.println(" "); if(shortestRoute == route1 || shortestRoute == route6) { System.out.println("route1 and route6 have the shortest distance"); } else if(shortestRoute == route2 || shortestRoute == route4) { System.out.println("route2 and route4 have the shortest distance"); } else if(shortestRoute == route3 || shortestRoute == route5) { System.out.println("route3 and route5 have the shortest distance"); } else if((shortestRoute == route1 || shortestRoute == route6) && (shortestRoute == route2 || shortestRoute == route4)) { System.out.println("route1, route6, route2 and route4 have the shortest distance"); } else if((shortestRoute == route1 || shortestRoute == route6) && (shortestRoute == route3 || shortestRoute == route5)) { System.out.println("route1, route6, route3 and route5 have the shortest distance"); } else if((shortestRoute == route3 || shortestRoute == route5) && (shortestRoute == route2 || shortestRoute == route4)) { System.out.println("route3, route5, route2 and route4 have the shortest distance"); } else { System.out.println("There is no shortest distance, they are all the same"); } } } 
7
  • 4
    It sounds to me that the code isn't quite working. Is that correct? Commented Jan 16, 2014 at 3:14
  • I guess it could be reviewed, but OP shouldn't expect a direct or indirect answer to the specific issue being encountered. Which doesn't keep an answerer from giving it away either, although reworking the code could make the source of the problem much more obvious. Commented Jan 16, 2014 at 3:17
  • well the code does work, but its not working the way i want it to, when all of the cities have the same distances for example, the program will not say that, and as you can see in my else statement that i intended for that to happen. It just spits out two random cities. @Jamal Commented Jan 16, 2014 at 3:27
  • 2
    If you want help on this issue, Stack Overflow would be the right place. I could migrate this post over there if you'd like. After you receive help, you may post your working code here for review. Commented Jan 16, 2014 at 3:29
  • 4
    Sorry I forgot to ping @Jamal on that comment. It's because Stack Overflow is the dedicated place to ask when you're stumped on broken code; Code Review is for when you've got your code to work, and then you wonder if it's good code you've written. Commented Jan 16, 2014 at 3:33

1 Answer 1

4

Your collection of if statements at the end is the problem. Its a collection of elseifs, so as soon as you match one expression you're done. You need to be sure your expressions are in most specific to least specific order.

You could simplify to something like this (pseudo code only)

bool r1 = shortestRoute == route1 || shortestRoute == route6; bool r2 = shortestRoute == route2 || shortestRoute == route4; bool r3 = shortestRoute == route3 || shortestRoute == route5; if (r1 && r2 && r2) { print "all the same" } else if (r1 && r2) { } else if (r1 && r3) { } else if (r2 && r3) { } // Now individual checks for r1 r2 and r3 
Sign up to request clarification or add additional context in comments.

1 Comment

@AlexChavez Now that your code works, we can review it on Code Review.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.