题目

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

简述

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

代码实现

整体设计

  类和属性、方法

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实现的更多相关文章

随机推荐

  1. ansible命令参数介绍

    -m:要执行的模块,默认为command -a:模块的参数 -u:ssh连接的用户名,默认用root,ansible.cfg中可以配置 -k:提示输入ssh登录密码.当使用密码验证的时候用 -s:su ...

  2. 二级目录下的运行main.py,找不到上级目录的解决方法

    import os, sys sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))

  3. Python爬取酷狗飙升榜前十首(100)首,写入CSV文件

    酷狗飙升榜,写入CSV文件 爬取酷狗音乐飙升榜的前十首歌名.歌手.时间,是一个很好的爬取网页内容的例子,对爬虫不熟悉的读者可以根据这个例子熟悉爬虫是如何爬取网页内容的. 需要用到的库:requests ...

  4. JS实现根据两点位置的经纬度获取距离

    // 经纬度转换成三角函数中度分表形式. function rad(d) { return d * Math.PI / 180.0; } // 根据经纬度计算距离,参数分别为第一点的纬度,经度:第二点 ...

  5. python基础(7):基本数据类型二(list、tuple)、range

    1. 列表 1.1 列表的介绍 列表是python的基础数据类型之⼀,其他编程语⾔也有类似的数据类型.比如JS中的数组, java中的数组等等.它是以[ ]括起来,每个元素⽤','隔开⽽且可以存放各种 ...

  6. Flask 教程 第四章:数据库

    本文翻译自 The Flask Mega-Tutorial Part IV: Database 在Flask Mega-Tutorial系列的第四部分,我将告诉你如何使用数据库. 本章的主题是重中之重 ...

  7. mysql 是否走索引问题

    问题探讨 : 当一列包含null 值时, is null  和 is not null  查询是否走索引 当用 != 时是否走索引 当用in时是否走索引 结论:当 查询范围比较小时, 以上枚举的都走索 ...

  8. DesignPattern系列__08UML相关知识

    前言 现在,很少有人和90年代一样,自己去实现一个软件的各个方面,也就是说,在工作中,和人沟通是必备的技能.那么,作为一枚码农,如何和他人沟通呢?这就要依靠本文的主题了--UML. 简介 UML--U ...

  9. JS基础语法---一元运算符

        *    ++  -- 都是运算符     *    ++ 和 --  可以分为:前+ 和后+  and   前- 和后-          *  如果++在后面:如: num++ +10参与 ...

  10. 【hexo+github搭建myblog】bash: npm: command not found 问题,疑似解决!关键词:NPM全局安装路径

    情况:打算用hexo+github搭建个人博客 1. hexo搭建,参考博文如下,非常感谢: Hexo+Github博客搭建完全教程 hexo从零开始到搭建完整 问题: 在最基本的安装步骤 (参考链接 ...