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

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

利用Java編寫24點(diǎn)小游戲的實(shí)例代碼

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

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

package com.company;import java.util.*;/** * 24點(diǎn)小游戲 * 游戲規(guī)則:系統(tǒng)自動(dòng)生成4個(gè)1-10的隨機(jī)整數(shù),玩家通過加減乘除操作,得到結(jié)果為24,每個(gè)數(shù)字只能使用一次 */public class Game24Player { final String[] patterns = {'nnonnoo', 'nnonono', 'nnnoono', 'nnnonoo', 'nnnnooo'}; final String ops = '+-*/^';//存儲(chǔ)運(yùn)算符 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點(diǎn)小游戲:'); System.out.print('使用以下數(shù)字得出24點(diǎn): '); System.out.println(digits); System.out.println('tips:輸入q退出游戲,輸入s打印解法以及出下一道題'); System.out.print('> '); String line = in.nextLine();//獲取控制臺(tái)下一行輸入的內(nèi)容 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恭喜你,回答正確,請(qǐng)繼續(xù)下一輪 '); digits = getSolvableDigits(); } else { System.out.println('n答題錯(cuò)誤,請(qǐng)重新答題'); } } catch (Exception e) { System.out.printf('%n%s 請(qǐng)重新輸入.%n', e.getMessage()); } } } //判斷玩家在控制臺(tái)輸入的內(nèi)容是否正確 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('括號(hào)不匹配.'); } if (parens != 0) throw new Exception('括號(hào)不匹配.'); if (opsCount != 3) throw new Exception('錯(cuò)誤輸入.'); 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('輸入無效,請(qǐng)重新輸入.'); } 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; } } //獲取一組隨機(jī)數(shù) 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個(gè)1-10的隨機(jī)數(shù) 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)); }}

運(yùn)行結(jié)果截圖

游戲題目

利用Java編寫24點(diǎn)小游戲的實(shí)例代碼

在控制臺(tái)輸入答案

利用Java編寫24點(diǎn)小游戲的實(shí)例代碼

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

利用Java編寫24點(diǎn)小游戲的實(shí)例代碼

輸入q是退出游戲。

利用Java編寫24點(diǎn)小游戲的實(shí)例代碼

總結(jié)

到此這篇關(guān)于利用Java編寫24點(diǎn)小游戲的文章就介紹到這了,更多相關(guān)Java編寫24點(diǎn)小游戲內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久久久久婷| 久久精品影视| 亚洲三级视频| 中日韩男男gay无套| 成人羞羞在线观看网站| 欧美成人精品一级| 欧美一区在线观看视频| 欧美视频二区| 久久成人av| 国产一区精品福利| 黄色aa久久| av在线日韩| 亚洲精品中文字幕乱码| aⅴ色国产欧美| 蜜桃久久av一区| 日韩精品五月天| 国产精品网站在线看| 卡一卡二国产精品| а√在线中文在线新版| 三级小说欧洲区亚洲区| 日韩在线短视频| 亚洲午夜黄色| 免费人成精品欧美精品| 青青青国产精品| 麻豆一区在线| 欧美成人基地| 午夜亚洲一区| 国产欧美在线| 麻豆91精品91久久久的内涵| 国产精品伦理久久久久久| 日韩欧美另类一区二区| 国产在线欧美| 亚洲日本欧美| 国产激情综合| 久久精品91| 国产精品毛片在线| 日本麻豆一区二区三区视频| 久久a爱视频| 99精品电影| 亚洲91在线| 国产一区二区精品久| 99精品视频在线观看免费播放| 久久av一区二区三区| 日韩福利在线观看| 婷婷激情一区| 天堂va欧美ⅴa亚洲va一国产| 精品久久国产一区| 日韩视频一区| 麻豆精品蜜桃视频网站| 欧美午夜不卡| 国产欧美91| 亚洲二区视频| 国产精品一区免费在线| 欧美午夜精彩| 日韩国产91| 日韩网站中文字幕| 日韩**一区毛片| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 日韩中文字幕高清在线观看| 亚洲作爱视频| 国产高清亚洲| 五月天久久久| 国产激情欧美| 一区二区视频欧美| 开心激情综合| 日韩一级网站| 麻豆国产欧美日韩综合精品二区| 亚洲欧洲一区| 国产一区二区三区黄网站| 在线一区二区三区视频| 成人在线免费观看网站| 亚洲青青久久| 成人精品亚洲| 国产精品极品| 伊人精品在线| 高清精品久久| 欧美精品aa| 日本欧美在线看| 婷婷激情一区| 久久三级中文| 亚洲开心激情| 99久久亚洲精品| 精品中文字幕一区二区三区四区| 中文精品电影| 激情自拍一区| 精品美女在线视频| 日韩av成人高清| 欧美日韩高清| 久久男人天堂| 欧美精品中文| 亚洲97av| 美女久久网站| 久久九九精品| 国产一区一一区高清不卡| 亚洲精品综合| 99久久久国产精品美女| 精品国产亚洲一区二区三区在线 | 国产一区二区三区久久久久久久久| 亚洲tv在线| 喷白浆一区二区| 婷婷激情综合| 日韩中文字幕高清在线观看| 国产欧美日韩精品一区二区免费| 亚洲午夜国产成人| 亚洲成人日韩| 亚洲不卡av不卡一区二区| 成人在线视频免费| 国产精品一区二区免费福利视频| 综合亚洲视频| 久久亚洲美女| 亚洲精品97| 99久久九九| 久久伦理在线| 91精品精品| 久久免费高清| 日韩精品一区二区三区免费观看| 91一区二区| 国产videos久久| 精品一区二区三区中文字幕在线| 国产伦精品一区二区三区千人斩| 亚洲精品第一| 麻豆成人91精品二区三区| 国产亚洲一卡2卡3卡4卡新区| 亚洲理论在线| 日本三级亚洲精品| 欧美亚洲人成在线| 日韩不卡一区二区三区| 日韩福利视频导航| 青草久久视频| 国产一级成人av| 国产精品magnet| 国产成人调教视频在线观看| 精品无人区麻豆乱码久久久| 黄色精品视频| 欧美日韩尤物久久| 99热精品久久| 黄色日韩在线| 在线视频精品| 亚洲影视一区二区三区| 蜜臀av一区二区三区| 亚洲免费福利一区| 88久久精品| 麻豆中文一区二区| 国产精品成人a在线观看| 日韩激情一区| 午夜精品婷婷| 蜜桃一区二区三区在线| 日本vs亚洲vs韩国一区三区二区| 91精品一区| 国产66精品| 精品一区欧美| 亚洲影视一区二区三区| 日韩av二区在线播放| 欧美激情五月| 国产精品yjizz视频网| 亚洲一级二级| 亚洲精品日韩久久| 国产精品地址| 日韩av免费| 一区二区精彩视频| 老司机免费视频一区二区| 另类中文字幕国产精品| 亚洲免费激情| 亚洲tv在线| 粉嫩av一区二区三区四区五区| 日韩在线观看| 中文字幕亚洲精品乱码| 国产精品免费大片| 日韩深夜视频| 久久性天堂网| 精品黄色一级片| 欧美日韩国产免费观看视频| 日韩精品视频在线看| 国产不卡一区| 国产亚洲亚洲| 国产精品videossex| 欧美日韩中文一区二区| 亚洲aⅴ网站| 丝袜美腿诱惑一区二区三区| 日韩在线一二三区| 精品少妇一区| 久久国产精品久久久久久电车 | 亚洲精品福利电影| 日韩精品一级二级 | 1024精品一区二区三区| 日韩一区精品| 色网在线免费观看| 亚洲精品护士| 日韩中文视频| 国产精品一卡| 欧美日韩中文一区二区| 国产精品主播| 99国产精品久久久久久久| 国产精品亚洲四区在线观看 | 91精品国产调教在线观看| 欧美视频久久| 黄色精品网站| 国产欧洲在线| 国产亚洲精品美女久久| 久久精品国产大片免费观看|