日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

利用Java編寫24點小游戲的實例代碼

瀏覽:86日期:2022-08-18 16:11:24

話不多說直接給大家上代碼

package com.company;import java.util.*;/** * 24點小游戲 * 游戲規則:系統自動生成4個1-10的隨機整數,玩家通過加減乘除操作,得到結果為24,每個數字只能使用一次 */public class Game24Player { final String[] patterns = {'nnonnoo', 'nnonono', 'nnnoono', 'nnnonoo', 'nnnnooo'}; final String ops = '+-*/^';//存儲運算符 String solution;//解題答案 List<Integer> digits; public static void main(String[] args) { new Game24Player().play(); } void play() { digits = getSolvableDigits(); Scanner in = new Scanner(System.in); while (true) { System.out.println('24點小游戲:'); System.out.print('使用以下數字得出24點: '); System.out.println(digits); System.out.println('tips:輸入q退出游戲,輸入s打印解法以及出下一道題'); System.out.print('> '); String line = in.nextLine();//獲取控制臺下一行輸入的內容 if (line.equalsIgnoreCase('q')) { System.out.println('nThanks for playing'); return; } if (line.equalsIgnoreCase('s')) { System.out.println(solution); digits = getSolvableDigits(); continue; } char[] entry = line.replaceAll('[^*+-/)(d]', '').toCharArray(); try { validate(entry); if (evaluate(infixToPostfix(entry))) { System.out.println('n恭喜你,回答正確,請繼續下一輪 '); digits = getSolvableDigits(); } else { System.out.println('n答題錯誤,請重新答題'); } } catch (Exception e) { System.out.printf('%n%s 請重新輸入.%n', e.getMessage()); } } } //判斷玩家在控制臺輸入的內容是否正確 void validate(char[] input) throws Exception { int total1 = 0, parens = 0, opsCount = 0; for (char c : input) { if (Character.isDigit(c)) total1 += 1 << (c - ’0’) * 4; else if (c == ’(’) parens++; else if (c == ’)’) parens--; else if (ops.indexOf(c) != -1) opsCount++; if (parens < 0) throw new Exception('括號不匹配.'); } if (parens != 0) throw new Exception('括號不匹配.'); if (opsCount != 3) throw new Exception('錯誤輸入.'); int total2 = 0; for (int d : digits) total2 += 1 << d * 4; if (total1 != total2) throw new Exception('輸入有誤.'); } boolean evaluate(char[] line) throws Exception { Stack<Float> s = new Stack<>(); try { for (char c : line) { if (’0’ <= c && c <= ’9’) s.push((float) c - ’0’); else s.push(applyOperator(s.pop(), s.pop(), c)); } } catch (EmptyStackException e) { throw new Exception('輸入無效,請重新輸入.'); } return (Math.abs(24 - s.peek()) < 0.001F); } float applyOperator(float a, float b, char c) { switch (c) { case ’+’: return a + b; case ’-’: return b - a; case ’*’: return a * b; case ’/’: return b / a; default: return Float.NaN; } } //獲取一組隨機數 List<Integer> randomDigits() { Random r = new Random(); List<Integer> result = new ArrayList<>(4); for (int i = 0; i < 4; i++) result.add(r.nextInt(9) + 1);//添加4個1-10的隨機數 return result; } List<Integer> getSolvableDigits() { List<Integer> result; do { result = randomDigits(); } while (!isSolvable(result)); return result; } boolean isSolvable(List<Integer> digits) { Set<List<Integer>> dPerms = new HashSet<>(4 * 3 * 2); permute(digits, dPerms, 0); int total = 4 * 4 * 4; List<List<Integer>> oPerms = new ArrayList<>(total); permuteOperators(oPerms, 4, total); StringBuilder sb = new StringBuilder(4 + 3); for (String pattern : patterns) { char[] patternChars = pattern.toCharArray(); for (List<Integer> dig : dPerms) { for (List<Integer> opr : oPerms) { int i = 0, j = 0; for (char c : patternChars) { if (c == ’n’) sb.append(dig.get(i++)); else sb.append(ops.charAt(opr.get(j++))); } String candidate = sb.toString(); try { if (evaluate(candidate.toCharArray())) { solution = postfixToInfix(candidate); return true; } } catch (Exception ignored) { } sb.setLength(0); } } } return false; } String postfixToInfix(String postfix) { class Expression { String op, ex; int prec = 3; Expression(String e) { ex = e; } Expression(String e1, String e2, String o) { ex = String.format('%s %s %s', e1, o, e2); op = o; prec = ops.indexOf(o) / 2; } } Stack<Expression> expr = new Stack<>(); for (char c : postfix.toCharArray()) { int idx = ops.indexOf(c); if (idx != -1) { Expression r = expr.pop(); Expression l = expr.pop(); int opPrec = idx / 2; if (l.prec < opPrec) l.ex = ’(’ + l.ex + ’)’; if (r.prec <= opPrec) r.ex = ’(’ + r.ex + ’)’; expr.push(new Expression(l.ex, r.ex, '' + c)); } else { expr.push(new Expression('' + c)); } } return expr.peek().ex; } char[] infixToPostfix(char[] infix) throws Exception { StringBuilder sb = new StringBuilder(); Stack<Integer> s = new Stack<>(); try { for (char c : infix) { int idx = ops.indexOf(c); if (idx != -1) { if (s.isEmpty()) s.push(idx); else { while (!s.isEmpty()) { int prec2 = s.peek() / 2; int prec1 = idx / 2; if (prec2 >= prec1)sb.append(ops.charAt(s.pop())); elsebreak; } s.push(idx); } } else if (c == ’(’) { s.push(-2); } else if (c == ’)’) { while (s.peek() != -2) sb.append(ops.charAt(s.pop())); s.pop(); } else { sb.append(c); } } while (!s.isEmpty()) sb.append(ops.charAt(s.pop())); } catch (EmptyStackException e) { throw new Exception('Invalid entry.'); } return sb.toString().toCharArray(); } void permute(List<Integer> lst, Set<List<Integer>> res, int k) { for (int i = k; i < lst.size(); i++) { Collections.swap(lst, i, k); permute(lst, res, k + 1); Collections.swap(lst, k, i); } if (k == lst.size()) res.add(new ArrayList<>(lst)); } void permuteOperators(List<List<Integer>> res, int n, int total) { for (int i = 0, npow = n * n; i < total; i++) res.add(Arrays.asList((i / npow), (i % npow) / n, i % n)); }}

運行結果截圖

游戲題目

利用Java編寫24點小游戲的實例代碼

在控制臺輸入答案

利用Java編寫24點小游戲的實例代碼

輸入s是查看結果并開始下一次游戲。

利用Java編寫24點小游戲的實例代碼

輸入q是退出游戲。

利用Java編寫24點小游戲的實例代碼

總結

到此這篇關于利用Java編寫24點小游戲的文章就介紹到這了,更多相關Java編寫24點小游戲內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久久9色精品国产一区二区三区| 精品一区二区三区中文字幕| 国产一区二区三区四区五区| 亚洲精品在线二区| 亚洲免费网址| 丝袜美腿亚洲一区二区图片| 日韩在线观看一区二区| 久久一二三区| 一区二区亚洲视频| 热久久久久久| 国产精品一区二区精品视频观看| 青青草91视频| 国产欧美一区二区精品久久久 | 日本欧美不卡| 久久国产日本精品| 国产在线看片免费视频在线观看| 麻豆精品视频在线观看视频| 久久不卡日韩美女| 麻豆国产精品| 亚洲综合电影| 久久免费黄色| 一区二区亚洲视频| 欧美天堂一区| 久久久久久久欧美精品| 黄色亚洲大片免费在线观看| 国产伊人精品| 玖玖精品视频| 欧美影院精品| 久久久久久夜| 天堂网在线观看国产精品| 亚洲国产成人精品女人| 三级亚洲高清视频| 日本少妇一区二区| 国产91在线精品| 午夜欧美视频| 日韩高清国产一区在线| 精品在线网站观看| 欧美成人精品| 久久激情五月激情| 亚洲免费福利| 野花国产精品入口| 国产日韩欧美一区在线| 国产在线一区不卡| aa亚洲婷婷| 国产精品一站二站| av资源亚洲| 亚洲一二三区视频| 国产成人免费| 爽好多水快深点欧美视频| 久久超级碰碰| 伊人影院久久| 久久99久久久精品欧美| 国产99久久| 日韩高清在线不卡| 日本欧美不卡| 欧美久久一区二区三区| 亚洲91精品| 国产日韩三级| 黄色欧美日韩| 精品亚洲精品| 国产毛片久久| 国产一区精品福利| 最新国产精品视频| 国产资源在线观看入口av| 麻豆精品91| 成人国产精品一区二区网站| 日韩中文字幕91| 中文在线а√天堂| 日韩精品一区二区三区中文在线 | 精品国产精品国产偷麻豆| 国产亚洲一区在线| 国产精品国产一区| 日本中文字幕一区二区视频| 色偷偷色偷偷色偷偷在线视频| 亚洲精品福利| 久久久精品五月天| 久久婷婷国产| 亚洲精品乱码日韩| 欧美亚洲精品在线| 久久永久免费| 深夜福利一区| 日韩视频在线一区二区三区| 国产精品久久久久久久久久10秀| 日韩一区二区三区四区五区| 久久视频国产| 韩国女主播一区二区三区| 日韩一区中文| 久久av一区| 日韩毛片视频| 国产精品v一区二区三区| 免费成人性网站| 宅男在线一区| 黑人精品一区| 久久精品女人| 国产免费播放一区二区| 久久亚洲国产精品一区二区| 在线日韩一区| 国产中文在线播放| 麻豆成人91精品二区三区| 日韩欧美另类中文字幕| 亚洲欧美日韩国产一区| 99久久99视频只有精品| 国产成人精品999在线观看| 久久精品xxxxx| 亚洲精品无播放器在线播放| 亚洲少妇在线| 欧美日韩少妇| 欧美特黄一级大片| 色婷婷精品视频| 亚洲精品永久免费视频| 欧美www视频在线观看| 精品精品99| 精品精品99| 精品一区视频| 久久精品网址| 美女国产精品久久久| 欧美欧美黄在线二区| 日本在线成人| 中文视频一区| 99在线观看免费视频精品观看| 在线日韩中文| 久久精品国产68国产精品亚洲| 夜鲁夜鲁夜鲁视频在线播放| 成人在线免费观看网站| 国产一区日韩| 成人亚洲精品| 日本黄色精品| 国产精品99在线观看| 激情黄产视频在线免费观看| 国产成人精品亚洲线观看| 国产va在线视频| 欧美日韩免费观看视频| 五月激情久久| 久久精品国语| 91精品亚洲| 免费久久99精品国产自在现线| 视频一区欧美精品| 中文字幕一区二区av| 91欧美极品| 精品国产91| 伊人久久高清| 99久久久久国产精品| 红桃视频国产精品| 午夜电影一区| 国产精品美女在线观看直播| 精品淫伦v久久水蜜桃| 中国字幕a在线看韩国电影| 久久久天天操| 国产精品婷婷| 日韩av中文字幕一区二区三区| 欧美亚洲二区| 精品国产亚洲一区二区在线观看| 97在线精品| jiujiure精品视频播放| 日韩中文字幕不卡| 热久久久久久| 伊人网在线播放| 一区久久精品| 国产欧美日韩一区二区三区四区 | 欧美精品一区二区久久| 首页国产欧美日韩丝袜| 欧美日韩99| 精品国产aⅴ| 99精品视频在线观看免费播放| 先锋影音国产一区| 国产剧情一区| 亚洲www啪成人一区二区| 男女男精品视频网| 国产精品欧美大片| 99热精品久久| 最新国产精品视频| 精品黄色一级片| 午夜视频精品| 日本精品在线播放| 亚洲伊人av| 亚洲精品字幕| 国产成人精品一区二区三区在线| 欧美日韩国产高清| 国产精品自在| 九九综合九九| 国产精品亚洲综合色区韩国| 久久久人人人| 日本欧美一区二区在线观看| 成人在线视频区| 蜜桃一区二区三区在线| 精品国产亚洲一区二区三区| 国产一区白浆| 国产成人精品一区二区三区在线| 欧美+亚洲+精品+三区| 久久国产精品免费精品3p| 成人免费电影网址| 日韩不卡手机在线v区| 日本久久成人网| 久久国产麻豆精品| 999在线观看精品免费不卡网站| 国产欧美一区二区三区国产幕精品 | 日韩一区二区三区在线免费观看| 亚洲影视一区二区三区| 欧美久久天堂| 综合激情网站|