2
\$\begingroup\$

I have an assignment that I have completed, but I feel as though the way I went about solving the problems could be optimized a bit. As well, I don't know if I'm properly utilizing return statements. I'm relatively new to coding so I don't have the knowledge, but I would love to learn if anyone wants to go through and see if they can help me, even just pointing me in the right direction without actually giving me a definitive answer would be fantastic.

Here is the problem: Write a program that displays, examines and manipulates a two dimensional array representing plane seats for a plane with 12 rows and 4 seats per row. Write methods for the following operations:

fillSeatsRandomly:Fills the array with random values in range from 0 to 1. Zero represents an empty seat and one represents a reserved seat.

displaySeats: Displays all the seats in the plane row by row. Empty seat is displayed as 0 and a reserved seat is displayed as X. Create vertical headings for the row numbers from 1 to 12 on the left hand side and horizontal column headings from A to D (for the 4 seats in the row).

isSeatAvailable: Receives an integer representing a row number and a character representing a seat from A to D. This method tests if the specified seat is available, otherwise it returns false. This method displays an error message when the seat selection is invalid.

reserveSeat: Reserves a specified seat. Receives two parameters: an integer representing a row number and a character representing a seat number from A to D. This method displays an error message when the seat is invalid.

seatsAvailInRow: counts and returns number of seats available in given row. Receives an integer representing row number.

findRowWithTwoSeats: This method look for the closest row with two adjacent available seats. If two adjacent seats are not available it returns 0.

countSeatsAvail: counts the number of all seats available in the plane and returns that number.

countTakenSeats: counts the number of all seats reserved in the plane and returns that number.

Here is my code

     public static void main(String[] args) {
        int[][] plane;//this is the array that will be plugged into the methods
        plane = fillSeatsRandomly();//creates the 12x4 array that will be used
        displaySeats(plane);//shows the user what seats are available/taken
        isSeatAvailable(plane);//allows the user to see if a seat is available
        reserveSeat(plane);//allows the user to reserve a seat
        displaySeats(plane);//shows the user their seat has been reserved
        seatsAvailInRow(plane);//shows how many seats are avail in given row
        findRowWithTwoSeats(plane);//finds closest row with adjacent seats
        countSeatsAvail(plane);//counts how many seats are available
        countTakenSeats(plane);//counts how many seats are taken
    }

    public static void displaySeats(int seats[][]) {//displays the seats
        System.out.print("\tA  \tB  \tC  \tD \n");
        for (int row = 0; row < seats.length; row++) {
            System.out.print(row + 1 + "");
            for (int seatNum = 0; seatNum < seats[row].length; seatNum++) {
                if (seats[row][seatNum] == 1) {
                    System.out.print("\tX  ");
                } else {
                    System.out.print("\t0  ");
                }
            }
            System.out.println();
        }
    }

    public static int[][] fillSeatsRandomly() {//fills seats randomly, returns
        //an array of seats either filled or empty 
        int[][] rndm = new int[12][4];
        for (int[] rndm1 : rndm) {
            for (int col = 0; col < rndm1.length; col++) {
                rndm1[col] = (int) Math.round(Math.random());
            }
        }
        return rndm;//return the array
    }//end of fillSeatsRandomly

    public static boolean isSeatAvailable(int[][] plane) {//asks user for input
        //checks if seat is available, returns true if it is and false if not
        Scanner input = new Scanner(System.in);
        int rowNum;//row number of the seat chosen
        int colNum = 4;//column of the seat chosen
        char seatSelect;//character of the seat chosen
        String str;//used to get char value for switch
        System.out.println("Choose which row you would like to check (1-12)");
        rowNum = input.nextInt() - 1;
        System.out.println("Choose which seat you would like: A,B,C, or D (Case"
                + " Sensitive)");
        str = input.next();
        seatSelect = str.charAt(0);
        switch (seatSelect) {
            case 'A':
                colNum = 0;
                break;
            case 'B':
                colNum = 1;
                break;
            case 'C':
                colNum = 2;
                break;
            case 'D':
                colNum = 3;
        }//end of switch
        if (colNum > 3 || colNum < 0 || rowNum > 11 || rowNum < 0) {
            System.out.println("Invalid Selection");
            return false;
        }//end of if
        if (plane[rowNum][colNum] != 0) {
            System.out.println("Sorry, seat is taken");
            return false;
        } else {
            System.out.println("This seat is available");
            return true;
        }//end of else
    }//end of isSeatAvail

    public static int reserveSeat(int[][] plane) {//asks user for input
        //reserves a seat based on user input, returns updated value to array
        Scanner input = new Scanner(System.in);
        int rowNum;//Row number of seat chosen
        int colNum = 4;//Column number of seat chosen
        char seatSelect;//Character of seat chosen
        String str;//used to get char value for switch
        System.out.println("Choose which row you would like to reserve (1-12)");
        rowNum = input.nextInt() - 1;
        System.out.println("Choose which seat you would like: A,B,C, or D (Case"
                + " Sensitive)");
        str = input.next();
        seatSelect = str.charAt(0);
        switch (seatSelect) {
            case 'A':
                colNum = 0;
                break;
            case 'B':
                colNum = 1;
                break;
            case 'C':
                colNum = 2;
                break;
            case 'D':
                colNum = 3;
        }//end of switch
        if (colNum > 3 || colNum < 0 || rowNum > 11 || rowNum < 0) {
            System.out.println("Invalid Selection");

        }//end of if
        if (plane[rowNum][colNum] != 0) {
            System.out.println("Sorry, seat is taken");

        } else {
            System.out.println("Your seat has been reserved");

        }//end of if else
        return plane[rowNum][colNum] = 1;//return updated array value
    } //end of reserveSeat

    public static int seatsAvailInRow(int[][] plane) {//checks how many seats
        //are available in a row determined by user input returns how many seats
        Scanner input = new Scanner(System.in);
        int rowNum;
        int rowSum = 0;
        int avail;
        System.out.println("Choose which row to see how many seats are"
                + " available (1-12)");
        rowNum = input.nextInt() - 1;
        for (int[] plane1 : plane) {
            rowSum = 0;
            for (int j = 0; j < plane1.length; j++) {
                rowSum += plane[rowNum][j];
            } //end of nested for
        } //end of for
        avail = 4 - rowSum;
        System.out.println("There is " + avail + " seat(s) available in that "
                + "row");
        return avail;//returns number of seats available
    }//end of seatsAvailInRow

    public static int findRowWithTwoSeats(int[][] plane) { //finds the closest
        //row that has 2 adjacent seats, returns row num, or 0 if none
        for (int i = 0; i < plane.length; i++) {
            for (int j = 0; j < plane[i].length; j++) {
            if (plane[i][0] + plane[i][1] == 0 || plane[i][1] + plane[i][2] == 0
                        || plane[i][2] + plane[i][3] == 0) {
                    System.out.println("Row " + (i + 1)
                            + " has adjacent seats");
                    return i;//returns row num with adjacent seats
                }//end of if
            } //end of nested for
        } //end of for
        return 0;//returns 0 if there is no adjacent seats
    }//end of findRowWithTwoSeats

    public static int countSeatsAvail(int[][] plane) {//counts how many seats
        //are available on the plane, returns int value for number of seats
        int count = 0;//used to keep track of how many seats are available
        for (int i = 0; i < plane.length; i++) {
            for (int j = 0; j < plane[i].length; j++) {
                if (plane[i][j] == 0) {
                    count++;
                }//end of if
            }//end of nested for
        }//end of for
        System.out.println("There are " + count + " seats available");
        return count;//returns the number of seats available
    }//end of countSeatsAvail

    public static int countTakenSeats(int[][] plane) {//counts number of seats
        //taken on the plane, returns int value for number of seats taken
        int count = 0;//used to keep track of how many seats are taken
        for (int i = 0; i < plane.length; i++) {
            for (int j = 0; j < plane[i].length; j++) {
                if (plane[i][j] == 1) {
                    count++;
                }
            }//end of nested for
        }//end of for
        System.out.println("There are " + count + " seats taken");
        return count;//returns number of seats taken
    }//end of countTakenSeats
}//end of class
\$\endgroup\$

1 Answer 1

3
\$\begingroup\$

The main feedback is going to be that you aren't delivering in the right way. You only needed to create methods that could be used by a reservation system internally. You don't need to create the whole reservation system.

You should start with defining a Plane as being this thing that "has" some seats:

class Plane {
    int[][] seats = new int[12][4];
}

Then, fillSeatsRandomly sounds like they want you to write an operation that works on some particular Plane that can update the status of its seats.

class Plane {
    int[][] seats = new int[12][4];

    public void fillSeatsRandomly() {
        for ( int row = 0; row < seats.length ; row ++ ) {
            // ...
        }
    }
}

And so on. Think about it as though your Prof. is going to take your code and write main for themselves. Though you can, and probably should, write your own main function to demonstrate your understanding. Just don't prompt the user. Instead, have it do hard-coded things using the randomized plane.

class Plane {
    int[][] seats = new int[12][4];

    public void fillSeatsRandomly() {
        for ( int row = 0; row < seats.length; row ++ ) {
            // ...
        }
    }

    public boolean isSeatAvailable(int row, char column) {
        // ...
        // return (... == 0);
    }

    // ...

    public static void main(String[] args) {
        Plane p = new Plane();
        p.fillSeatsRandomly();
        p.displaySeats();
        if (p.isSeatAvailable(4, 'C')) {
            p.reserveSeat(4, 'C');
        }
        // ...
    }
}

I've dropped the word static from all but main. Do you understand why that is? If not, refresh yourself.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.