zoukankan      html  css  js  c++  java
  • NimSystem实现

    题目

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

     

    简述

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

    代码实现

    整体设计

      类和属性、方法

    NimGame类

     1 /**
     2  * @author jyroy
     3  * NimGame类
     4  */
     5 public class NimGame {
     6     public int stonecount;
     7     public int upperremoval;
     8     public String player1;
     9     public String player2;
    10 
    11 }

    NimPlayer类

     1 import java.text.DecimalFormat;
     2 
     3 /**
     4  * @author jyroy
     5  * player类
     6  */
     7 public class NimPlayer {
     8     private String username;
     9     private String familyname;
    10     private String givenname;
    11     private int gamesplayed;
    12     private int gameswon;
    13     public String getUsername() {
    14         return username;
    15     }
    16     public void setUsername(String username) {
    17         this.username = username;
    18     }
    19     public String getFamilyname() {
    20         return familyname;
    21     }
    22     public void setFamilyname(String familyname) {
    23         this.familyname = familyname;
    24     }
    25     public String getGivenname() {
    26         return givenname;
    27     }
    28     public void setGivenname(String givenname) {
    29         this.givenname = givenname;
    30     }
    31     public int getGamesplayed() {
    32         return gamesplayed;
    33     }
    34     public void setGamesplayed(int gamesplayed) {
    35         this.gamesplayed = gamesplayed;
    36     }
    37     public int getGameswon() {
    38         return gameswon;
    39     }
    40     public void setGameswon(int gameswon) {
    41         this.gameswon = gameswon;
    42     }
    43     @Override
    44     public String toString() {
    45         return  username + "," + familyname + "," + givenname
    46                 + "," + gamesplayed + " games, " + gameswon + " wins";
    47     }
    48     
    49     public String rate() {
    50         return String.valueOf(gameswon/gamesplayed*100);
    51     }
    52     
    53     public void rank() {
    54         String s = gameswon/gamesplayed*100+"%";
    55         DecimalFormat df=new DecimalFormat("00");
    56         String str2=df.format(gamesplayed);
    57         System.out.printf("%-5s",s);
    58         System.out.printf("| ");
    59         System.out.printf(str2 + " games | "+givenname + " " + familyname+"
    ");
    60     }
    61 
    62     
    63 }

    NimSystem类

      1 import java.util.ArrayList;
      2 import java.util.Collections;
      3 import java.util.Comparator;
      4 import java.util.HashMap;
      5 import java.util.Iterator;
      6 import java.util.List;
      7 import java.util.Map;
      8 import java.util.Map.Entry;
      9 import java.util.Scanner;
     10 import java.util.TreeMap;
     11 
     12 /**
     13  * @author jyroy
     14  * NimSystem类
     15  */
     16 public class NimSys {
     17     
     18     static ArrayList<NimPlayer> playerList = new ArrayList<NimPlayer>();
     19     
     20     /**
     21      * add a new user
     22      * @param username
     23      * @param family_name
     24      * @param given_name
     25      */
     26     public static void addplayer(String username,String family_name, String given_name) {
     27         NimPlayer nimplayer = new NimPlayer();
     28         nimplayer.setUsername(username);
     29         nimplayer.setFamilyname(family_name);
     30         nimplayer.setGivenname(given_name);
     31         nimplayer.setGamesplayed(0);
     32         nimplayer.setGameswon(0);
     33         for(int i=0;i<playerList.size();i++) {
     34             if(playerList.get(i).getUsername().equals(username)) {
     35                 System.out.println("The player already exists.");
     36                 return;
     37             }
     38         }
     39         playerList.add(nimplayer);
     40         return;
     41     }
     42     
     43     
     44     /**
     45      * remove a user or all users
     46      * @param username
     47      */
     48     public static void removeplayer(String username) {
     49         if(username!=null) {
     50             for(int i=0;i<playerList.size();i++) {
     51                 if(playerList.get(i).getUsername().equals(username)) {
     52                     playerList.remove(i);
     53                     return;
     54                 }
     55             }
     56             System.out.println("The player does not exist.");
     57             return;
     58         }else if(username==null) {
     59             System.out.println("Are you sure you want to remove all players? (y/n)");
     60             Scanner sc=new Scanner(System.in);
     61             String s=sc.nextLine();
     62             if(s.equals("y")) {
     63                 playerList.clear();
     64             }
     65             return;
     66         }
     67     }
     68     
     69     
     70     /**
     71      * edit a user
     72      * @param username
     73      * @param family_name
     74      * @param given_name
     75      */
     76     public static void editplayer(String username,String family_name, String given_name) {
     77         for(int i=0;i<playerList.size();i++) {
     78             if(playerList.get(i).getUsername().equals(username)) {
     79                 playerList.get(i).setUsername(username);
     80                 playerList.get(i).setFamilyname(family_name);
     81                 playerList.get(i).setGivenname(given_name);
     82                 return;
     83             }
     84         }
     85         System.out.println("The player does not exist.");
     86         return;
     87     }
     88     
     89     
     90     /**
     91      * reset a user
     92      * @param username
     93      */
     94     public void resetstats(String username) {
     95         if(username!=null) {
     96             for(int i=0;i<playerList.size();i++) {
     97                 if(playerList.get(i).getUsername().equals(username)) {
     98                     playerList.get(i).setGamesplayed(0);
     99                     playerList.get(i).setGameswon(0);
    100                     return;
    101                 }
    102             }
    103             System.out.println("The player does not exist.");
    104         }else if(username==null) {
    105             System.out.println("Are you sure you want to reset all player statistics? (y/n)");
    106             Scanner sc=new Scanner(System.in);
    107             String s=sc.nextLine();
    108             if(sc.equals("y")) {
    109                 for(int i=0;i<playerList.size();i++) {
    110                     playerList.get(i).setGamesplayed(0);
    111                     playerList.get(i).setGameswon(0);
    112                 }
    113             }
    114         }
    115     }
    116     
    117     
    118     /**
    119      * display a user or all users
    120      * @param username
    121      */
    122     public static void displayplayer(String username) {
    123         if(username!=null) {
    124             for(int i=0;i<playerList.size();i++) {
    125                 if(playerList.get(i).getUsername().equals(username)) {
    126                     System.out.println(playerList.get(i).toString());
    127                     return;
    128                 }
    129             }
    130             System.out.println("The player does not exist.");
    131         }else if(username==null) {
    132             for(int i=0;i<playerList.size();i++) {
    133                 System.out.println(playerList.get(i).toString());
    134             }
    135         }
    136         return;
    137     }
    138 
    139     
    140     /**
    141      * rank all users in desc or asc
    142      * @param order
    143      */
    144     public static void rankings(String order) {
    145         Map<String, String> map = new TreeMap<String, String>();
    146         for(int i=0;i<playerList.size();i++) {
    147             map.put(playerList.get(i).getUsername(), playerList.get(i).rate());
    148         }
    149         if(order==null||order.equals("desc")){
    150             List<Entry<String, String>> list = new ArrayList<Entry<String, String>>(map.entrySet());
    151             
    152             Collections.sort(list,new Comparator<Map.Entry<String,String>>() {
    153                 
    154                 public int compare(Entry<String, String> o1, Entry<String, String> o2) {
    155                     return o2.getValue().compareTo(o1.getValue());
    156                 }
    157             });
    158             
    159             int c=0;
    160             Iterator<Entry<String, String>> it2 = list.iterator();
    161             while(it2.hasNext()) {
    162                 Entry<String, String> entry = it2.next();
    163                 for(int j=0;j<playerList.size();j++) {
    164                     if(entry.getKey().equals(playerList.get(j).getUsername())) {
    165                         playerList.get(j).rank();
    166                     }
    167                 }
    168                 if(c==9) {
    169                     return;
    170                 }
    171                 c+=1;
    172             }
    173         }else if(order.equals("asc")) {
    174             Iterator<Entry<String, String>> it2 = map.entrySet().iterator();
    175             int c=0;
    176             while(it2.hasNext()) {
    177                 Entry<String, String> entry = it2.next();
    178                 for(int j=0;j<playerList.size();j++) {
    179                     if(entry.getKey().equals(playerList.get(j).getUsername())) {
    180                         playerList.get(j).rank();
    181                     }
    182                 }
    183                 if(c==9) {
    184                     return;
    185                 }
    186                 c+=1;
    187             }
    188         }
    189     }
    190     
    191     /**
    192      * start a game
    193      * @param initialstones
    194      * @param upperbound
    195      * @param username1
    196      * @param username2
    197      */
    198     public static void startgame(int initialstones, int upperbound, String username1, String username2) {
    199         int f=0;
    200         NimPlayer player1 = null;
    201         NimPlayer player2 = null;
    202         for(int i=0;i<playerList.size();i++) {
    203             if(playerList.get(i).getUsername().equals(username1)) {
    204                 f+=1;
    205                 player1 = playerList.get(i);
    206             }else if(playerList.get(i).getUsername().equals(username2)) {
    207                 f+=1;
    208                 player2 = playerList.get(i);
    209             }
    210         }
    211         if(f==2) {
    212             System.out.println("
    "+"Initial stone count:" + initialstones);
    213             System.out.println("Maximum stone removal: " + upperbound);
    214             System.out.println("Player 1: " + player1.getGivenname() + " " + player1.getFamilyname());
    215             System.out.println("Player 2: " + player2.getGivenname() + " " + player2.getFamilyname()+"
    ");
    216             int currentstone = initialstones;
    217             int round = 1;
    218             while(round>0) {
    219                 System.out.printf("
    "+currentstone + "stones left: ");
    220                 for(int i1=0;i1<currentstone;i1++) {
    221                     System.out.printf("* ");
    222                 }
    223                 if(round%2==1) {
    224                     System.out.println("
    "+username1 + "’s turn - remove how many?");
    225                 }else {
    226                     System.out.println("
    "+username2 + "’s turn - remove how many?");
    227                 }
    228                 Scanner sc=new Scanner(System.in);
    229                 int s=sc.nextInt();
    230                 if(s>upperbound) {
    231                     System.out.println("Invalid move. You must remove between 1 and " + upperbound + "stones.");
    232                     continue;
    233                 }else if(s==0) {
    234                     System.out.printf("Invalid move. You must remove between 1 and ");
    235                     if(upperbound>currentstone) {
    236                         System.out.print(currentstone);
    237                     }else {
    238                         System.out.print(upperbound);
    239                     }
    240                     System.out.printf("stones.");
    241                     continue;
    242                 }else {
    243                     currentstone -= s;
    244                 }
    245                 if(currentstone==0) {
    246                     System.out.println("Game Over");
    247                     if(round%2==1) {
    248                         System.out.println(username2 + "  wins!");
    249                         player2.setGameswon(player2.getGameswon()+1);
    250                         player2.setGamesplayed(player2.getGamesplayed()+1);
    251                         player1.setGamesplayed(player1.getGamesplayed()+1);
    252                         return;
    253                     }else {
    254                         System.out.println(username1 + "  wins!");
    255                         player1.setGameswon(player1.getGameswon()+1);
    256                         player1.setGamesplayed(player1.getGamesplayed()+1);
    257                         player2.setGamesplayed(player2.getGamesplayed()+1);
    258                         return;
    259                     }
    260                 }
    261                 round+=1;
    262             }
    263         }else {
    264             System.out.println("One of the players does not exist.");
    265             return;
    266         }
    267     }
    268     /**
    269      * Exits the Nimsys program
    270      */
    271     public static void exit() {
    272         System.out.println("");
    273         System.exit(0);
    274     }
    275     
    276     public static void main(String[] args) {
    277         System.out.println("Welcome to Nim");
    278         while(true) {
    279             System.out.printf("$");
    280             Scanner sc=new Scanner(System.in);
    281             String s=sc.nextLine();
    282             String[] arr = s.split(" ");
    283             if(arr[0].equals("addplayer")) {
    284                 addplayer(arr[1].split(",")[0], arr[1].split(",")[1], arr[1].split(",")[2]);
    285             }else if(arr[0].equals("removeplayer")){
    286                 if(arr.length!=1) removeplayer(arr[1]);
    287                 else removeplayer(null);
    288             }else if(arr[0].equals("editplayer")) {
    289                 editplayer(arr[1].split(",")[0], arr[1].split(",")[1], arr[1].split(",")[2]);
    290             }else if(arr[0].equals("displayplayer")) {
    291                 if(arr.length!=1) displayplayer(arr[1]);
    292                 else displayplayer(null);
    293             }else if(arr[0].equals("rankings")) {
    294                 if(arr.length!=1) rankings(arr[1]);
    295                 else rankings(null);
    296             }else if(arr[0].equals("startgame")) {
    297                 startgame(Integer.parseInt(arr[1].split(",")[0]), Integer.parseInt(arr[1].split(",")[1]), arr[1].split(",")[2], arr[1].split(",")[3]);
    298             }else if(arr[0].equals("exit")) {
    299                 exit();
    300             }
    301         }
    302     }
    303     
    304     
    305 }
  • 相关阅读:
    学习规划
    一位十年的老司机告诉你什么是编程思想
    React开发
    一个简单的ipfs音乐播放器的实现
    React错误总结(三)
    React错误总结解决方案(二)
    mongoid模糊查询
    Rails accepts_nested_attributes_for表单嵌套的利器
    route_path
    "constantize" and "with_indifferent_access" method
  • 原文地址:https://www.cnblogs.com/jyroy/p/10800743.html
Copyright © 2011-2022 走看看