Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 5

CS 1103 programming assignment unit 3

Codes examles

Tape.java

public class Tape {

// Instance variables

private Cell currentCell;

/**

* Default constructor

*/

public Tape() {

// Create a cell with blank content

Cell blankCell = new Cell();

blankCell.content = ' ';

blankCell.next = null;

blankCell.prev = null;

// Set blankCell as current cell

this.currentCell = blankCell;

/**

* This method returns the pointer that points to the current cell.

*/

public Cell getCurrentCell() {

return this.currentCell;

/**
* This method returns the char from the current cell.

*/

public char getContent() {

return this.currentCell.content;

/**

* This method changes the char in the current cell to the specified value.

*/

public void setContent(char ch) {

this.currentCell.content = ch;

/**

* This method moves the current cell one position to the left along the

* tape. Note that if the current cell is the leftmost cell that exists,

* then a new cell must be created and added to the tape at the left of the

* current cell, and then the current cell pointer can be moved to point to

* the new cell. The content of the new cell should be a blank space.

* (Remember that the Turing machine's tape is conceptually infinite, so

* your linked list must must be prepared to expand on demand, when the

* machine wants to move past the current end of the list.)

*/

public void moveLeft() {

// Check if currentCell is the leftmost cell

if (this.currentCell.prev == null) {

// Create a cell with blank content


Cell blankCell = new Cell();

blankCell.content = ' ';

blankCell.prev = null;

// Set next of blankCell as currentCell

blankCell.next = this.currentCell;

// Set prev of currentCell as blankCell

this.currentCell.prev = blankCell;

// Move currentCell to the left

this.currentCell = this.currentCell.prev;

/**

* This method moves the current cell one position to the right along the

* tape. Note that if the current cell is the rightmost cell that exists,

* then a new cell must be created and added to the tape at the right of the

* current cell, and then the current cell pointer can be moved to point to

* the new cell. The content of the new cell should be a blank space.

*/

public void moveRight() {

// Check if currentCell is the rightmost cell

if (this.currentCell.next == null) {

// Create a cell with blank content

Cell blankCell = new Cell();

blankCell.content = ' ';

blankCell.next = null;
// Set prev of blankCell as currentCell

blankCell.prev = this.currentCell;

// Set next of currentCell as blankCell

this.currentCell.next = blankCell;

// Move currentCell to the right

this.currentCell = this.currentCell.next;

/**

* This method returns a String consisting of the chars from all the cells

* on the tape, read from left to right, except that leading or trailing

* blank characters should be discarded. The current cell pointer should not

* be moved by this method; it should point to the same cell after the

* method is called as it did before. You can create a different pointer to

* move along the tape and get the full contents. (This method is the

* hardest one to implement.)

*/

public String getTapeContents() {

// Check if there are no cells

if ((this.currentCell.next == null) && (this.currentCell.prev == null))

return "";

else {

StringBuffer res = new StringBuffer();

// Add content of currentCell to content

res.append(currentCell.content);
// Get reference of the cell left of the currentCell

Cell cell = this.currentCell.prev;

// Get all the chars to the left of the currentCell

while (cell != null) {

// Append content of cell to content

res.insert(0, cell.content);

// Move cell to the left

cell = cell.prev;

// Get reference of the cell right of the currentCell

cell = this.currentCell.next;

// Get all the chars to the right of the currentCell

while (cell != null) {

// Append content of cell to content

res.append(cell.content);

// Move cell to the right

cell = cell.next;

// Return content

return res.toString().trim();

You might also like