Question

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(System.in);
    Stack<String> input = new Stack<String>();
    inputIncoming(s, input);
    inputOutgoing(s, input);
    outputResult();
}

// 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 = s.next();
      if (i.equals("DONE") && !input.isEmpty()) {
       break;
      } else if (i.equals("DONE") && input.isEmpty()) {
       System.out.println("Error: Please provide at least one incoming car.");
      } else {
       input.push(i);
      }
    }
    while (!input.isEmpty()) {
      incoming.add(input.pop());
    }
}...

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

Assisting Tutor

Related Homework Solutions

Java Programming Problems: Expression Trees and AVL Trees
Homework Solution
$50.00
Java
Programming
Computer Science
Expression Trees
AVL Trees
Algorithms
Input
Output
Recursive Functions
Strings
Variables
Statements
Loops
Methods
Expressions
Objects
Classes
Operators
Nodes
Numbers
Accounting Problems Using Java
Homework Solution
$45.00
Java
Programming
Codes
Algorithms
Computer Science
Statements
Variables
Loops
Input
Output
Integers
Interest Rates
Account Balance
Display Messages
Compounding Interest
Strings
Dates
Analysis
Java Programming Problems
Homework Solution
$50.00
Computer Science
Java Programming
Book Objects
Buttons
Records
Database
Helper Functions
Functions
Statements
Variables
GUI
UML Diagrams
Events
Prices
Java Program
Homework Solution
$30.00
Computer
Science
Java
Programming
Comments
Enhance
Better
Performance
Unit
Testing
Java Programming Problems
Homework Solution
$50.00
Computer Science
Programming
Algorithms
Java
Compiling
Dictionary
Spell Checker
Line Arguments
Sample Text
Sequences
Hash Tables
Strings
Operations
Queue
Counters
Statements
Variables
Get help from a qualified tutor
Live Chats