美团Java面试题解析

1. 引言

在今天的科技时代,Java已经成为了一门非常重要的编程语言,被广泛应用于各种软件开发项目中。而作为一个Java开发者,面试时遇到一些有挑战性的问题是很常见的。本文将解析一道来自美团的Java面试题,帮助读者更好地理解并准备此类问题。

2. 题目背景

本次面试题涉及到一个在线电影订票系统。在该系统中,用户可以浏览电影列表,选择电影并购票。为了简化问题,我们假设系统中只有以下几个实体:

  • 用户(User):用户信息,包括用户名和密码。
  • 电影(Movie):电影信息,包括电影名和剩余票数。
  • 订单(Order):用户购票的订单信息,包括订单号、用户信息和电影信息。

3. 题目要求

我们需要完成以下几个功能:

  • 用户注册;
  • 用户登录;
  • 显示电影列表;
  • 选择电影并购票;
  • 显示用户订单。

4. 解题思路

为了实现上述功能,我们可以使用Java编程语言来开发一个简单的控制台应用程序。下面是具体的实现思路。

步骤1:定义实体类

首先,我们需要定义用户(User)、电影(Movie)和订单(Order)这三个实体类。代码如下所示:

// User.java
public class User {
    private String username;
    private String password;
    
    // 省略构造方法和getter/setter方法
}

// Movie.java
public class Movie {
    private String name;
    private int remainingTickets;
    
    // 省略构造方法和getter/setter方法
}

// Order.java
public class Order {
    private String orderNumber;
    private User user;
    private Movie movie;
    
    // 省略构造方法和getter/setter方法
}

步骤2:实现用户注册和登录功能

接下来,我们需要实现用户注册和登录功能。用户注册时,需要输入用户名和密码,并将用户信息保存到一个用户列表中;用户登录时,需要输入用户名和密码,并校验用户名和密码是否匹配。代码如下所示:

// UserService.java
import java.util.ArrayList;
import java.util.List;

public class UserService {
    private List<User> userList;
    
    public UserService() {
        userList = new ArrayList<>();
    }
    
    public void register(String username, String password) {
        User user = new User(username, password);
        userList.add(user);
    }
    
    public boolean login(String username, String password) {
        for (User user : userList) {
            if (user.getUsername().equals(username) && user.getPassword().equals(password)) {
                return true;
            }
        }
        return false;
    }
}

步骤3:实现电影列表和购票功能

然后,我们需要实现电影列表和购票功能。电影列表可以通过一个电影列表对象来管理,购票时需要输入电影名称,并根据电影名称查找到对应的电影对象,并将其剩余票数减一。代码如下所示:

// MovieList.java
import java.util.ArrayList;
import java.util.List;

public class MovieList {
    private List<Movie> movieList;
    
    public MovieList() {
        movieList = new ArrayList<>();
    }
    
    public void addMovie(String name, int remainingTickets) {
        Movie movie = new Movie(name, remainingTickets);
        movieList.add(movie);
    }
    
    public Movie findMovie(String name) {
        for (Movie movie : movieList) {
            if (movie.getName().equals(name)) {
                return movie;
            }
        }
        return null;
    }
}

// TicketService.java
public class TicketService {
    private MovieList movieList;
    
    public TicketService() {
        movieList = new MovieList();
    }
    
    public void showMovieList() {
        for (Movie movie : movieList.getMovieList()) {
            System.out.println(movie.getName() + " (剩余票数:" + movie.getRemainingTickets() + ")");
        }
    }
    
    public void buyTicket(String movieName) {
        Movie movie = movieList.findMovie(movieName);
        if (movie != null && movie.getRemainingTickets() > 0) {
            movie.setRemainingTickets(movie.getRemainingTickets() - 1);
            System.out.println