美团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