NimSystem实现
题目
题目比较长,我直接放截图吧












简述
一个比较经典的类与对象的题目,三个类实现了一个比较简单的系统,具体的每个类的要求可以从上面的题目描述中看出(只要你有耐心读完。。),不再赘述,代码如下
代码实现
整体设计
类和属性、方法

NimGame类
/**
* @author jyroy
* NimGame类
*/
public class NimGame {
public int stonecount;
public int upperremoval;
public String player1;
public String player2; }
NimPlayer类
import java.text.DecimalFormat; /**
* @author jyroy
* player类
*/
public class NimPlayer {
private String username;
private String familyname;
private String givenname;
private int gamesplayed;
private int gameswon;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getFamilyname() {
return familyname;
}
public void setFamilyname(String familyname) {
this.familyname = familyname;
}
public String getGivenname() {
return givenname;
}
public void setGivenname(String givenname) {
this.givenname = givenname;
}
public int getGamesplayed() {
return gamesplayed;
}
public void setGamesplayed(int gamesplayed) {
this.gamesplayed = gamesplayed;
}
public int getGameswon() {
return gameswon;
}
public void setGameswon(int gameswon) {
this.gameswon = gameswon;
}
@Override
public String toString() {
return username + "," + familyname + "," + givenname
+ "," + gamesplayed + " games, " + gameswon + " wins";
} public String rate() {
return String.valueOf(gameswon/gamesplayed*100);
} public void rank() {
String s = gameswon/gamesplayed*100+"%";
DecimalFormat df=new DecimalFormat("00");
String str2=df.format(gamesplayed);
System.out.printf("%-5s",s);
System.out.printf("| ");
System.out.printf(str2 + " games | "+givenname + " " + familyname+"\n");
} }
NimSystem类
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.TreeMap; /**
* @author jyroy
* NimSystem类
*/
public class NimSys { static ArrayList<NimPlayer> playerList = new ArrayList<NimPlayer>(); /**
* add a new user
* @param username
* @param family_name
* @param given_name
*/
public static void addplayer(String username,String family_name, String given_name) {
NimPlayer nimplayer = new NimPlayer();
nimplayer.setUsername(username);
nimplayer.setFamilyname(family_name);
nimplayer.setGivenname(given_name);
nimplayer.setGamesplayed(0);
nimplayer.setGameswon(0);
for(int i=0;i<playerList.size();i++) {
if(playerList.get(i).getUsername().equals(username)) {
System.out.println("The player already exists.");
return;
}
}
playerList.add(nimplayer);
return;
} /**
* remove a user or all users
* @param username
*/
public static void removeplayer(String username) {
if(username!=null) {
for(int i=0;i<playerList.size();i++) {
if(playerList.get(i).getUsername().equals(username)) {
playerList.remove(i);
return;
}
}
System.out.println("The player does not exist.");
return;
}else if(username==null) {
System.out.println("Are you sure you want to remove all players? (y/n)");
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
if(s.equals("y")) {
playerList.clear();
}
return;
}
} /**
* edit a user
* @param username
* @param family_name
* @param given_name
*/
public static void editplayer(String username,String family_name, String given_name) {
for(int i=0;i<playerList.size();i++) {
if(playerList.get(i).getUsername().equals(username)) {
playerList.get(i).setUsername(username);
playerList.get(i).setFamilyname(family_name);
playerList.get(i).setGivenname(given_name);
return;
}
}
System.out.println("The player does not exist.");
return;
} /**
* reset a user
* @param username
*/
public void resetstats(String username) {
if(username!=null) {
for(int i=0;i<playerList.size();i++) {
if(playerList.get(i).getUsername().equals(username)) {
playerList.get(i).setGamesplayed(0);
playerList.get(i).setGameswon(0);
return;
}
}
System.out.println("The player does not exist.");
}else if(username==null) {
System.out.println("Are you sure you want to reset all player statistics? (y/n)");
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
if(sc.equals("y")) {
for(int i=0;i<playerList.size();i++) {
playerList.get(i).setGamesplayed(0);
playerList.get(i).setGameswon(0);
}
}
}
} /**
* display a user or all users
* @param username
*/
public static void displayplayer(String username) {
if(username!=null) {
for(int i=0;i<playerList.size();i++) {
if(playerList.get(i).getUsername().equals(username)) {
System.out.println(playerList.get(i).toString());
return;
}
}
System.out.println("The player does not exist.");
}else if(username==null) {
for(int i=0;i<playerList.size();i++) {
System.out.println(playerList.get(i).toString());
}
}
return;
} /**
* rank all users in desc or asc
* @param order
*/
public static void rankings(String order) {
Map<String, String> map = new TreeMap<String, String>();
for(int i=0;i<playerList.size();i++) {
map.put(playerList.get(i).getUsername(), playerList.get(i).rate());
}
if(order==null||order.equals("desc")){
List<Entry<String, String>> list = new ArrayList<Entry<String, String>>(map.entrySet()); Collections.sort(list,new Comparator<Map.Entry<String,String>>() { public int compare(Entry<String, String> o1, Entry<String, String> o2) {
return o2.getValue().compareTo(o1.getValue());
}
}); int c=0;
Iterator<Entry<String, String>> it2 = list.iterator();
while(it2.hasNext()) {
Entry<String, String> entry = it2.next();
for(int j=0;j<playerList.size();j++) {
if(entry.getKey().equals(playerList.get(j).getUsername())) {
playerList.get(j).rank();
}
}
if(c==9) {
return;
}
c+=1;
}
}else if(order.equals("asc")) {
Iterator<Entry<String, String>> it2 = map.entrySet().iterator();
int c=0;
while(it2.hasNext()) {
Entry<String, String> entry = it2.next();
for(int j=0;j<playerList.size();j++) {
if(entry.getKey().equals(playerList.get(j).getUsername())) {
playerList.get(j).rank();
}
}
if(c==9) {
return;
}
c+=1;
}
}
} /**
* start a game
* @param initialstones
* @param upperbound
* @param username1
* @param username2
*/
public static void startgame(int initialstones, int upperbound, String username1, String username2) {
int f=0;
NimPlayer player1 = null;
NimPlayer player2 = null;
for(int i=0;i<playerList.size();i++) {
if(playerList.get(i).getUsername().equals(username1)) {
f+=1;
player1 = playerList.get(i);
}else if(playerList.get(i).getUsername().equals(username2)) {
f+=1;
player2 = playerList.get(i);
}
}
if(f==2) {
System.out.println("\n"+"Initial stone count:" + initialstones);
System.out.println("Maximum stone removal: " + upperbound);
System.out.println("Player 1: " + player1.getGivenname() + " " + player1.getFamilyname());
System.out.println("Player 2: " + player2.getGivenname() + " " + player2.getFamilyname()+"\n");
int currentstone = initialstones;
int round = 1;
while(round>0) {
System.out.printf("\n"+currentstone + "stones left: ");
for(int i1=0;i1<currentstone;i1++) {
System.out.printf("* ");
}
if(round%2==1) {
System.out.println("\n"+username1 + "’s turn - remove how many?");
}else {
System.out.println("\n"+username2 + "’s turn - remove how many?");
}
Scanner sc=new Scanner(System.in);
int s=sc.nextInt();
if(s>upperbound) {
System.out.println("Invalid move. You must remove between 1 and " + upperbound + "stones.");
continue;
}else if(s==0) {
System.out.printf("Invalid move. You must remove between 1 and ");
if(upperbound>currentstone) {
System.out.print(currentstone);
}else {
System.out.print(upperbound);
}
System.out.printf("stones.");
continue;
}else {
currentstone -= s;
}
if(currentstone==0) {
System.out.println("Game Over");
if(round%2==1) {
System.out.println(username2 + " wins!");
player2.setGameswon(player2.getGameswon()+1);
player2.setGamesplayed(player2.getGamesplayed()+1);
player1.setGamesplayed(player1.getGamesplayed()+1);
return;
}else {
System.out.println(username1 + " wins!");
player1.setGameswon(player1.getGameswon()+1);
player1.setGamesplayed(player1.getGamesplayed()+1);
player2.setGamesplayed(player2.getGamesplayed()+1);
return;
}
}
round+=1;
}
}else {
System.out.println("One of the players does not exist.");
return;
}
}
/**
* Exits the Nimsys program
*/
public static void exit() {
System.out.println("");
System.exit(0);
} public static void main(String[] args) {
System.out.println("Welcome to Nim");
while(true) {
System.out.printf("$");
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
String[] arr = s.split(" ");
if(arr[0].equals("addplayer")) {
addplayer(arr[1].split(",")[0], arr[1].split(",")[1], arr[1].split(",")[2]);
}else if(arr[0].equals("removeplayer")){
if(arr.length!=1) removeplayer(arr[1]);
else removeplayer(null);
}else if(arr[0].equals("editplayer")) {
editplayer(arr[1].split(",")[0], arr[1].split(",")[1], arr[1].split(",")[2]);
}else if(arr[0].equals("displayplayer")) {
if(arr.length!=1) displayplayer(arr[1]);
else displayplayer(null);
}else if(arr[0].equals("rankings")) {
if(arr.length!=1) rankings(arr[1]);
else rankings(null);
}else if(arr[0].equals("startgame")) {
startgame(Integer.parseInt(arr[1].split(",")[0]), Integer.parseInt(arr[1].split(",")[1]), arr[1].split(",")[2], arr[1].split(",")[3]);
}else if(arr[0].equals("exit")) {
exit();
}
}
} }
NimSystem实现的更多相关文章
随机推荐
- Long Jumps CodeForces - 479D
E - Long Jumps CodeForces - 479D Valery is a PE teacher at a school in Berland. Soon the students ar ...
- C++ getline函数用法详解
转载自http://c.biancheng.net/view/1345.html 虽然可以使用 cin 和 >> 运算符来输入字符串,但它可能会导致一些需要注意的问题. 当 cin 读取数 ...
- SpringBoot开发案例之mail中文附件名字乱码
最近在开发一个邮件发送多附件的微服务,使用的是org.springframework.mail.javamail.JavaMailSender;包下面的JavaMailSender 但是发送出来的附件 ...
- ASP.NET(1)
1.IIS安装问题,先装VS再装IIS,处理程序映射有问题,使用VS自带的控制台输入命令,注册路径 2.开发模式,一般处理程序,使用IO操作读取html文件,使前后端分离 3.post请求和get请求 ...
- mysql 是否走索引问题
问题探讨 : 当一列包含null 值时, is null 和 is not null 查询是否走索引 当用 != 时是否走索引 当用in时是否走索引 结论:当 查询范围比较小时, 以上枚举的都走索 ...
- 你不知道的JS第一卷
这两天,开始看你不知道的JavaScript,第一卷.
- 熟悉的味道——从Java单例写到C++单例
设计模式中,单例模式是常见的一种.单例模式需要满足以下两个条件: 保证一个类只能创建一个示例: 提供对该实例的全局访问点. 关于单例最经典的问题就是DCL(Double-Checked Lock),今 ...
- Go切片去掉重复元素
1.Go切片去掉重复元素 如果传入的是string类型: //slice去重 func removeRepByMap(slc []string) []string { result := []stri ...
- 如何在Pycharm中添加新的模块
在使用Pycharm编写程序时,我们时常需要调用某些模块,但有些模块事先是没有的,我们需要把模块添加上去. 最近在学习爬虫,写了下面几行代码: 结果出现错误 错误ModuleNotFoundError ...
- 201271050130-滕江南《面向对象程序设计(java)》第十一周学习总结
项目 内容 <面向对象程序设计(java)> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/ ...