Коллекции 今天我們要複習

Театр.java

import java.util.ArrayList;
import java.util.List;
public class Theatre {
    private final String theatreName;
    private List<Seat> seats = new ArrayList<>();
    public Theatre(String theatreName, int numRows, int seatsPerRow) {
        this.theatreName = theatreName;
        int lastRow = 'A' + (numRows - 1);
        for (char row = 'A'; row <= lastRow; row++) {
            for (int seatNum = 1; seatNum <= seatsPerRow; seatNum++) {
                Seat seat = new Seat(row + String.format("%02d", seatNum));
                seats.add(seat);
            }
        }
    }
    public String getTheatreName() {
        return theatreName;
    }
    public boolean reserveSeat(String seatNumber) {
        Seat requestSeat = null;
        for (Seat seat : seats) {
            if (seat.getSeatNumber().equals(seatNumber)) {
                requestSeat = seat;
                break;
            }
        }
        if (requestSeat == null) {
            System.out.println("There is no seat " + seatNumber);
            return false;
        }
        return requestSeat.reserve();
    }
    // for testing
    public void getSeats() {
        for (Seat seat : seats) {
            System.out.print(seat.getSeatNumber() + " ");
            // each 10 seat print out to next line
            if ((seats.indexOf(seat) + 1) % 10 == 0) {
                System.out.println();
            }
        }
    }
    private class Seat {
        private final String seatNumber;
        private boolean reserved = false;
        public Seat(String seatNumber) {
            this.seatNumber = seatNumber;
        }
        public boolean reserve() {
            if (!reserved) {
                reserved = true;
                System.out.println("Seat " + seatNumber + " reserved.");
                return true;
            } else {
                return false;
            }
        }
        public boolean cancel() {
            if (reserved) {
                reserved = false;
                System.out.println("Reservation of seat " + seatNumber + "cancelled");
                return true;
            } else {
                return false;
            }
        }
        public String getSeatNumber() {
            return seatNumber;
        }
    }

}

MainTheatre.java

public class MainTheatre {
    public static void main(String[] args) {
        Theatre theatre = new Theatre("Muzha Guangming", 8, 10);
        theatre.getSeats();
        if (theatre.reserveSeat("E05")) {
            System.out.println("Okay, this seat is yours, one seat is $1");
        } else {
            System.out.println("Sorry, this seat is sold out already.");
        }
        if (theatre.reserveSeat("E05")) {
            System.out.println("Okay, this seat is yours, one seat is $1");
        } else {
            System.out.println("Sorry, this seat is sold out already.");
        }
    }
}

輸出結果:

A01 A02 A03 A04 A05 A06 A07 A08 A09 A10

B01 B02 B03 B04 B05 B06 B07 B08 B09 B10

C01 C02 C03 C04 C05 C06 C07 C08 C09 C10

D01 D02 D03 D04 D05 D06 D07 D08 D09 D10

E01 E02 E03 E04 E05 E06 E07 E08 E09 E10

F01 F02 F03 F04 F05 F06 F07 F08 F09 F10

G01 G02 G03 G04 G05 G06 G07 G08 G09 G10

H01 H02 H03 H04 H05 H06 H07 H08 H09 H10

Место E05 зарезервировано.

Хорошо, это место ваше, одно место стоит 1 доллар США

К сожалению, это место уже распродано.

範例為電影院的訂票系統

Ульрих

int lastRow = ‘A’ + (numRows-1);

Буква A — это символ Юникода U+0041, а ее двоичное представление — 01000001

Если в театре 10 рядов, вычисление будет выглядеть так: lastRow = 'A' + (10–1) = 'A' + 9. В двоичном формате вычисление будет следующим: 01000001 (A) + 00001001 (9) = 01001010. Результат двоичный код юникода U+004A, который представляет букву J. Вывод: последняя строка театра — «J», потому что первая строка — «A» + девять строк ведут к строке «J».

‘A’ = 65, ‘B’ = 66, ‘C’ = 67, ‘D’ = 68, ……

‘a’ = 97, ‘b’ = 98, ‘c’ = 99, ‘d’ = 100, ……

Theatre.java 改

import java.util.*;
public class Theatre {
    private final String theatreName;
    //    private List<Seat> seats = new ArrayList<>();
    private Collection<Seat> seats = new LinkedList<>();
//    private Collection<Seat> seats = new HashSet<>();
//    private Collection<Seat> seats = new LinkedHashSet<>();
//    private Collection<Seat> seats = new TreeSet<>(); // not work

    public Theatre(String theatreName, int numRows, int seatsPerRow) {
        this.theatreName = theatreName;
        int lastRow = 'A' + (numRows - 1);
        for (char row = 'A'; row <= lastRow; row++) {
            for (int seatNum = 1; seatNum <= seatsPerRow; seatNum++) {
                Seat seat = new Seat(row + String.format("%02d", seatNum));
                seats.add(seat);
            }
        }
    }
    public String getTheatreName() {
        return theatreName;
    }
    public boolean reserveSeat(String seatNumber) {
        Seat requestSeat = null;
        for (Seat seat : seats) {
            if (seat.getSeatNumber().equals(seatNumber)) {
                requestSeat = seat;
                break;
            }
        }
        if (requestSeat == null) {
            System.out.println("There is no seat " + seatNumber);
            return false;
        }
        return requestSeat.reserve();
    }
    // for testing
    public void getSeats() {
        for (Seat seat : seats) {
            System.out.println(seat.getSeatNumber());
        }
    }
    private class Seat {
        private final String seatNumber;
        private boolean reserved = false;
        public Seat(String seatNumber) {
            this.seatNumber = seatNumber;
        }
        public boolean reserve() {
            if (!reserved) {
                reserved = true;
                System.out.println("Seat " + seatNumber + " reserved.");
                return true;
            } else {
                return false;
            }
        }
        public boolean cancel() {
            if (reserved) {
                reserved = false;
                System.out.println("Reservation of seat " + seatNumber + "cancelled");
                return true;
            } else {
                return false;
            }
        }
        public String getSeatNumber() {
            return seatNumber;
        }
    }

}

輸出結果:

A01

A02

A03

A04

A05

A06

A07

A08

A09

A10

B01

B02

B03

B04

B05

B06

B07

B08

B09

B10

C01

C02

C03

C04

C05

C06

C07

C08

C09

C10

D01

D02

D03

D04

D05

D06

D07

D08

D09

D10

E01

E02

E03

E04

E05

E06

E07

E08

E09

E10

F01

F02

F03

F04

F05

F06

F07

F08

F09

F10

G01

G02

G03

G04

G05

G06

G07

G08

G09

G10

H01

H02

H03

H04

H05

H06

H07

H08

H09

H10

Место E05 зарезервировано.

Хорошо, это место ваше, одно место стоит 1 доллар США

К сожалению, это место уже распродано.

改成 collection,並用繼承 collection 的,同級 4 個 List 來測試能否使用

結論是同級都能使用,但再往下級就不能

待續

本篇使用代碼