Subject Computer Science Java Programming


In this project, you will be implementing a railroad yard simulation program. The user will provide a set of incoming cars, and then a desired outgoing order. Your program will determine if the given incoming cars can be rearranged to the desired outgoing order or not.

Background: This is an example of a control/management system: in order to deliver specific resources to specific destinations, we have to guarantee that those resources are available at their destinations. Consider: the easiest car to detact from a train transporting materials is the back most one. Thus, it would ideal to arrange the train's cars in such a way that the order of destinations visited, matches the order of the cars. If the required car is in the middle of the train, there will be trouble! Our goal is to address this by trying to arrange the cars into the order of the destinations they will visit ("desired outgoing order").

Problem: Imagine that the rail yard looks like this:
Incoming cars                                                 Outgoing cars (based on destination order)
A B C D E                                                         E D C B A
>-----------------------------\                /----------------------------------->
                               \             /
                                 |          |
                                 |          |
                                 |          |
                                 |          |
                                 |          |
                                  Waiting Line

In this example, the incoming cars come in the order E, D, C, B and A. The desired outgoing order (since the track moves only to the right) is A, B, C, D and E. Our program considers the first incoming car, vs the desired outgoing car. Since E != A, E must go into the waiting line. Now our program will consider both the car at the top of the waiting line (since it is blocking all the others cars) as well as the incoming car each time. Again, E != A but also D != A, so D gets put in the waiting line, blocking E in the process. This will continue until A is the only car left in the incoming line, and it will be sent out. This leaves nothing incoming, but B would be the top car in the waiting line. Since B == B, B gets taken from the waiting line and sent out. This will repeat until all cars are gone, meaning the input was successfully matched to the output. An example that does NOT match is UGTA to AGTU. A, T and G would go into the waiting line. U would be sent out, but then the next required outgoing car is T. There would be nothing left in the incoming line, and the top car in the waiting line would be G. So, the match fails.

Program Features:
1.You must take in incoming cars from the user until they input "DONE".
2.You must take in outgoing cars from the user until they have given as many cars as they did in step 1.
3.You must print out whether or not the given input cars can be matched to the given output.
Java API Usage Requirements:
• You may import the following packages: Scanner, Stack, Queue, LinkedList. No other packages are allowed.
• For LinkedList, you may only use it via Queue interface. Your program must not use lists directly but instead rely on stacks and queues.
• When using the Queue collection, use only the following methods: add, remove, peek, isEmpty, size.
• When using the Stack collection, use only the following methods: push, pop, peek, isEmpty, size.
Requirements and Notes:
• Don't use arrays to store trains and move cars. Use stack(s) and queue(s).
• You may not ask the user to specify the number of cars ahead of time.
• The user must provide at least one incoming car. Print a message if they don't and then allow the user to type in incoming cars again.
• "Cars" is a loose term. The user should be allowed to type in anything as a car. An example of three incoming cars might be: A, honda, 10101
• You may not reorder the incoming, outgoing or waiting line.
• Cars cannot go from the waiting line back to the incoming line.
• You do not need to verify that the user typed in the same outgoing items as incoming. (i.e. They said the only incoming car is A and the only outgoing one is B. Your program should report that it cannot be matched, but you do not need to display a special error message or anything else)
• Make sure you test your program thoroughly. You are encouraged to use the provided examples, but you should verify that your program works with several of your own examples.

Solution Preview

This material may consist of step-by-step explanations on how to solve a problem or examples of proper writing, including the use of citations, references, bibliographies, and formatting. This material is made available for the sole purpose of studying and learning - misuse is strictly forbidden.

public void run() {
    Scanner s = new Scanner(;
    Stack<String> input = new Stack<String>();
    inputIncoming(s, input);
    inputOutgoing(s, input);

// Helper method to query the user's choice of incoming car ordering
public void inputIncoming(Scanner s, Stack<String> input) {
    System.out.println("Please type in the order of incoming cars. Type DONE to stop.");
    while (true) {
      String i =;
      if (i.equals("DONE") && !input.isEmpty()) {
      } else if (i.equals("DONE") && input.isEmpty()) {
       System.out.println("Error: Please provide at least one incoming car.");
      } else {
    while (!input.isEmpty()) {

This is only a preview of the solution. Please use the purchase button to see the entire solution

Assisting Tutor
Get College Homework Help.

Are you sure you don't want to upload any files?

Fast tutor response requires as much info as possible.

Upload a file
Continue without uploading

We couldn't find that subject.
Please select the best match from the list below.

We'll send you an email right away. If it's not in your inbox, check your spam folder.

  • 1
  • 2
  • 3
Live Chats