導航:首頁 > 編程語言 > 24點游戲java

24點游戲java

發布時間:2022-08-08 23:31:25

1. 用C語言程序編寫「搶24」游戲,規則就是兩個人,第一個人從數字1開始,可以說1或者1和2,第二個人

摘要 您好,從撲克中每次取出4張牌。使用加減乘除,第一個能得出24者為贏。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求編程解決24點游戲。

2. 求高手幫忙做個用java做的24點游戲程序

呵呵,是要算24點結果,還是要一個帶界面,游戲步驟的24點游戲?
你就簡單一句話,誰知道你要幹啥啊~

3. 一個java面試題:計算24點游戲 編程

import java.util.Random;

public class test2
{
public static void main(String[] args)
{
Random random = new Random();
int a[] = new int[4];
for(int i=0; i<4; i++)
{
a[i] = random.nextInt(13)+1;
}
for(int j=0; j<4; j++)
{
System.out.println("第" + j +"個數:" + a[j]);
}
Calcula(a);

}

public static void Calcula(int[] a)
{
int add, sub, multi, div;
add = 0;
sub = 0;
multi = 0;
div = 0;
for(int i=0; i<4; i++)
{
add = add + a[i];
sub = sub - a[i];
multi = multi * a[i];
div = div/a[i];
}
if(add==24)
{
System.out.println(a[0] + "+" + a[1] + "+" + a[2] + "+" + a[3]
+ "=" + add);

}
else if(sub==24)
{
System.out.println(a[0] + "-" + a[1] + "-" + a[2] + "-" + a[3]
+ "=" + sub);
}
else if(multi==24)
{
System.out.println(a[0] + "*" + a[1] + "*" + a[2] + "*" + a[3]
+ "=" + multi);
}
else if(div==24)
{
System.out.println(a[0] + "÷" + a[1] + "÷" + a[2] + "÷" + a[3]
+ "=" + div);
}
else
{
System.out.println("對不起,沒有實現24點的數");
}
}
}

編譯通過~

4. 用JAVA設計算24點的游戲的隨機數字問題

public void randFour(){
int[] a=new int[4];
for(int i=0;i<a.length;i++){
a[i]=(int)( Math.random()*20+1);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("第"+(i+1)+"個數:"+a[i]);
}
}

5. 用java語言實現24點紙牌游戲,並且在游戲中可以

看過兩天有沒時間,有時間可以給你寫個控制台版的,帶界面的就沒啥可能了,還有就是提問之前請用「請」字

6. java算24點代碼:輸入4個數算24點,能夠在命令提示符下就可以運行。100多

import java.util.Scanner;

/** 給定4個數字計算24 */
public class Core {

private double expressionResult = 24;
// private int maxLine=10;
private boolean error = true;
private double numbers[] = new double[4];
public Object resultReturn;

/**
* 該對象擁有3個私有變數 expressionResult,所需結果 maxLine,輸出結果每頁行數 error,是否出錯
* numbers[4],記錄用來運算的4個數
*
* 其次,該對象擁有以下方法供外部調用 setNumbers(double[] <運算的數>) 輸入用來運算的數,4個時才能計算,無返回
* setMaxLine(int <行數>) 輸入每頁的行數,無返回 getMaxLine() 返回每頁的行數,類型為int
* setExpressionResult(double <所需結果>) 輸入所需結果,無返回 getExpressionResult()
* 返回所需結果,類型為double getExpression() 返回可得出所需結果的表達式,類型為字元串數組
*
* 最後,私有方法均為計算與表達式轉換部分
*/

// 測試使用
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] arr = new int[4];
System.out.print("輸入第一個數:");
arr[0] = scanner.nextInt();
System.out.print("輸入第二個數:");
arr[1] = scanner.nextInt();
System.out.print("輸入第三個數:");
arr[2] = scanner.nextInt();
System.out.print("輸入第四個數:");
arr[3] = scanner.nextInt();
Core s = new Core();
s.setNumbers(arr);
String[] output = s.getExpression();
for (int i = 0; i < output.length; i++) {
System.out.println(output[i]);
}
}

/** 設定被計算的四個數,由於是數組,所以具有容錯功能(不為4個數) */
public void setNumbers(double[] n) {
if (n.length == 4) {
error = false;
numbers = n;
} else
error = true;
}

public void setNumbers(int[] n) {
if (n.length == 4) {
error = false;
for (int i = 0; i < 4; i++) {
numbers[i] = n[i];
}
} else
error = true;
}

/** 設定每頁顯示的行數 */
// public void setMaxLine(int n) {
// if (n>0) {
// maxLine=n;
// }
// }
// /** 返回每頁顯示的行數 */
// public int getMaxLine() {
// return maxLine;
// }
/** 設定需要得到的結果 */
public void setExpressionResult(double n) {
expressionResult = n;
}

/** 返回所需結果 */
public double expressionResult() {
return expressionResult;
}

/** 返回符合條件的表達式 */
public String[] getExpression() {
if (!error) {
String[] expression = calculate(numbers);
return expression;
} else
return new String[] { "出錯了,輸入有誤" };
}

/** cal24(),輸出結果為24的表達式 */
private String[] calculate(double[] n) {
if (n.length != 4)
return new String[] { "Error" };
double[] n1 = new double[3];
double[] n2 = new double[2];
String[] resultString = new String[1024]; // 最多1000組解,暫時未溢出
int count = 0;
boolean isRepeat = false;
for (int t1 = 0; t1 < 6; t1++) {
for (int c1 = 0; c1 < 6; c1++) {
for (int t2 = 0; t2 < 3; t2++) {
for (int c2 = 0; c2 < 6; c2++) {
for (int c3 = 0; c3 < 6; c3++) {
if ((c1 / 3 == c2 / 3 && (c1 % 3) * (c2 % 3) != 0)
|| (c2 / 3 == c3 / 3 && (c2 % 3) * (c3 % 3) != 0)
|| (c1 / 3 == c3 / 3
&& (c1 % 3) * (c3 % 3) != 0 && t2 == 2)) {
// 去除連減連除的解,因為x/(y/z)=x*z/y
continue;
}
n1 = cal1(n, t1, c1);
n2 = cal2(n1, t2, c2);
double result = cal(n2[0], n2[1], c3);
if ((result - expressionResult) < 0.00000001
&& (expressionResult - result) < 0.00000001) {
resultString[count] = calString(n, t1, c1, t2,
c2, c3)
+ "=" + (int) expressionResult;
for (int i = 0; i < count; i++) {
isRepeat = false;
if (resultString[i]
.equals(resultString[count])) { // 去除完全重復的解
isRepeat = true;
break; // 提前退出循環
}
}
if (c1 == c2 && c2 == c3 && c1 % 3 == 0
&& t1 + t2 != 0) { // 連加連乘
isRepeat = true;
}
if (!isRepeat) {
count++;
}
}
}
}
}
}
}
if (count == 0)
return new String[] { "該組數無解" };
String[] resultReturn = new String[count];
System.array(resultString, 0, resultReturn, 0, count);
return resultReturn;
}

/** cal1(),將4個數計算一次後返回3個數 */
private double[] cal1(double[] n, int t, int c) { // t為原來的t1,c為原來的c1
double[] m = new double[3];
switch (t) {
case 0:
m[1] = n[2];
m[2] = n[3];
m[0] = cal(n[0], n[1], c);
break;
case 1:
m[1] = n[1];
m[2] = n[3];
m[0] = cal(n[0], n[2], c);
break;
case 2:
m[1] = n[1];
m[2] = n[2];
m[0] = cal(n[0], n[3], c);
break;
case 3:
m[1] = n[0];
m[2] = n[3];
m[0] = cal(n[1], n[2], c);
break;
case 4:
m[1] = n[0];
m[2] = n[2];
m[0] = cal(n[1], n[3], c);
break;
default:
m[1] = n[0];
m[2] = n[1];
m[0] = cal(n[2], n[3], c);
}
return m;
}

/** cal2(),將3個數計算一次後返回2個數 */
private double[] cal2(double[] n, int t, int c) { // t為原來的t2,c為原來的c2
double[] m = new double[2];
switch (t) {
case 0:
m[1] = n[2];
m[0] = cal(n[0], n[1], c);
break;
case 1:
m[1] = n[1];
m[0] = cal(n[0], n[2], c);
break;
default:
m[1] = n[0];
m[0] = cal(n[1], n[2], c);
}
return m;
}

/** cal(),將2個數計算後返回結果 */
private double cal(double n1, double n2, int c) { // n1,n2為運算數,c為運算類型
switch (c) {
case 0:
return n1 + n2;
case 1:
return n1 - n2;
case 2:
return n2 - n1;
case 3:
return n1 * n2;
case 4:
if (n2 == 0)
return 9999; // 使計算結果必不為24
else
return n1 / n2;
default:
if (n1 == 0)
return 9999; // 同上
else
return n2 / n1;
}
}

/** calString(),輸出表達式 */
private String calString(double[] n, int t1, int c1, int t2, int c2, int c3) {
String[] nString = new String[4];
switch (t1) {
case 0:
nString[0] = calString2("" + (int) n[0], "" + (int) n[1], c1);
nString[1] = "" + (int) n[2];
nString[2] = "" + (int) n[3];
break;
case 1:
nString[0] = calString2("" + (int) n[0], "" + (int) n[2], c1);
nString[1] = "" + (int) n[1];
nString[2] = "" + (int) n[3];
break;
case 2:
nString[0] = calString2("" + (int) n[0], "" + (int) n[3], c1);
nString[1] = "" + (int) n[1];
nString[2] = "" + (int) n[2];
break;
case 3:
nString[0] = calString2("" + (int) n[1], "" + (int) n[2], c1);
nString[1] = "" + (int) n[0];
nString[2] = "" + (int) n[3];
break;
case 4:
nString[0] = calString2("" + (int) n[1], "" + (int) n[3], c1);
nString[1] = "" + (int) n[0];
nString[2] = "" + (int) n[2];
break;
default:
nString[0] = calString2("" + (int) n[2], "" + (int) n[3], c1);
nString[1] = "" + (int) n[0];
nString[2] = "" + (int) n[1];
}
if ((c2 / 3 > c1 / 3 && (t2 != 2 || c2 / 3 == c3 / 3))
|| ((c3 / 3 > c1 / 3 + c2 / 3) && t2 == 2)
|| (c3 == 1 && c1 / 3 == 0)) // 特定情況下加上一個括弧*****************************
nString[0] = '(' + nString[0] + ')';
switch (t2) {
case 0:
nString[0] = calString2(nString[0], "" + nString[1], c2);
nString[1] = nString[2];
break;
case 1:
nString[0] = calString2(nString[0], nString[2], c2);
break;
default:
nString[3] = nString[0];
nString[0] = calString2(nString[1], nString[2], c2);
nString[1] = nString[3];
}
if (c3 / 3 > c2 / 3 || (c3 == 2 && nString[0].indexOf('+') >= 0)) // 特定情況下加上一個括弧*****************************
nString[0] = '(' + nString[0] + ')';
return calString2(nString[0], nString[1], c3);
}

/** calString(),根據符號輸出一部運算表達式 */
private String calString2(String n1, String n2, int c) {
switch (c) {
case 0:
return n1 + '+' + n2;
case 1:
return n1 + '-' + n2;
case 2:
return n2 + '-' + n1;
case 3:
return n1 + '*' + n2;
case 4:
return n1 + '/' + n2;
default:
return n2 + '/' + n1;
}
}
}

7. 24點速算游戲 Java 代碼

  1. importjava.util.ArrayList;
  2. importjava.util.Arrays;
  3. importjava.util.Collection;
  4. importjava.util.HashSet;
  5. importjava.util.List;
  6. importjava.util.Set;
  7. /**
  8. *用給定的4個整數通過加減乘除運算得到24點,如果有多種情況,則全部輸出,如果不能得到24點,輸出提示<br>
  9. *
  10. *@思路:將指定的4個數字進行全排列,將運算符『+』、『-』、『*』、『/』取3個進行所有情況排列,
  11. *然後將所有的數字排列與所有的運算符排列按順序計算,
  12. *如果最後計算結果等於想要的結果值比如24,則為符合條件的運算,
  13. *將所有符合條件的數字排列和運算符排列存儲起來,並在最後列印輸出所有可能的情況
  14. *
  15. *@authorchenjie
  16. *
  17. */
  18. publicclassTwentyFourPoint{
  19. publicstaticvoidmain(String[]args){
  20. try{
  21. Set<String>set=caculate(newint[]{18,18,6,12},24);
  22. printlnResultSet(set);
  23. }catch(Exceptione){
  24. //e.printStackTrace();開發期間方便查找錯誤,測試通過後就無需列印錯誤信息了
  25. System.err.println(e.getMessage());
  26. }
  27. }
  28. /**
  29. *列印結果集
  30. *
  31. *@paramresultSet
  32. *結果集
  33. */
  34. (Collection<String>resultSet){
  35. for(Stringstr:resultSet){
  36. System.out.println(str);
  37. }
  38. }
  39. /**
  40. *得到給定整形數組的全排列情況
  41. *
  42. *@paramnumbers
  43. *給定的整形數組
  44. *@return全排列數組
  45. */
  46. privatestaticint[][]arrangeAllNumbers(int[]numbers){
  47. List<int[]>list=newArrayList<int[]>();
  48. allSort(numbers,0,numbers.length-1,list);
  49. int[][]resultSet=newint[list.size()][list.get(0).length];
  50. resultSet=list.toArray(resultSet);
  51. returnresultSet;
  52. }
  53. /**
  54. *得到給定的操作中出現的所有操作符排列情況
  55. *
  56. *@paramoperators
  57. *出現的操作符數組
  58. *@paramnumber
  59. *每組操作符的數量
  60. *@return所有操作符排列數組
  61. */
  62. privatestaticchar[][]arrangeAllOperators(char[]operators,intnumber){
  63. intsetSize=(int)Math.pow(operators.length,number);
  64. intindex=0;
  65. char[][]resultSet=newchar[setSize][number];
  66. for(inti=0;i<operators.length;i++){
  67. for(intj=0;j<operators.length;j++){
  68. for(intk=0;k<operators.length;k++){
  69. resultSet[index][0]=operators[i];
  70. resultSet[index][1]=operators[j];
  71. resultSet[index][2]=operators[k];
  72. index++;
  73. }
  74. }
  75. }
  76. returnresultSet;
  77. }
  78. /**
  79. *根據給定的一組整數,通過加減乘除運算,得到想要的結果,如果可以得到結果,則返回所有可能的結果的運算形式。
  80. *返回的運算形式,均按從左到右的順序計算,並不是遵循四則運演算法則,比如:<br>
  81. *輸出的結果形式為:<br>
  82. *1*8-6*12=24<br>
  83. *表示的運算順序是:<br>
  84. *1:1*8=8,<br>
  85. *2:8-6=2,<br>
  86. *3:2*12=24<br>
  87. *而不是按照四則運演算法則計算:<br>
  88. *1:1*8=8,<br>
  89. *2:6*12=72,<br>
  90. *3:8*72=576<br>
  91. *
  92. *
  93. *@paramnumbers
  94. *給定進行運算的一組整數,4個數為一組
  95. *@paramtargetNumber
  96. *想要得到的結果
  97. *@return所有可能得到想要的結果的所有運算形式的字元串形式集合
  98. *@throwsException
  99. *如果不能得到想要的結果,則拋出該異常,表明根據指定的一組數字通過一系列的加減乘除不能得到想要的結果
  100. */
  101. publicstaticSet<String>caculate(int[]numbers,inttargetNumber)
  102. throwsException{
  103. Set<String>resultSet=newHashSet<String>();//這里用Set而不是用List,主要是因為當給定的一組數字中如果有重復數字的話,同一結果會被出現多次,如果用List存放的話,會將重復的結果都存放起來,而Set會自動消除重復值
  104. char[][]operatorsArrangement=arrangeAllOperators(newchar[]{'+',
  105. '-','*','/'},3);
  106. int[][]numbersArrangement=arrangeAllNumbers(numbers);
  107. for(int[]nums:numbersArrangement)
  108. for(char[]operators:operatorsArrangement){
  109. intresult=0;
  110. try{
  111. result=caculate(nums,operators);
  112. }catch(Exceptione){//出現非精確計算
  113. continue;
  114. }
  115. if(result==targetNumber)
  116. resultSet.add(buildString(nums,operators,targetNumber));//如果計算後的結果等於想要的結果,就存放到集合中
  117. }
  118. if(resultSet.isEmpty())
  119. thrownewException("給定的數字:"+Arrays.toString(numbers)
  120. +"不能通過加減乘除運算得到結果:"+targetNumber);
  121. returnresultSet;
  122. }
  123. /**
  124. *將一組整型數字以給定的操作符按順序拼接為一個完整的表達式字元串
  125. *
  126. *@paramnums
  127. *一組整型數字
  128. *@paramoperators
  129. *一組操作符
  130. *@paramtarget
  131. *目標值
  132. *@return拼接好的表達式字元串
  133. */
  134. (int[]nums,char[]operators,inttarget){
  135. Stringstr=String.valueOf(nums[0]);
  136. for(inti=0;i<operators.length;i++){
  137. str=str+''+operators[i]+''+nums[i+1];
  138. }
  139. str=str+"="+target;
  140. returnstr;
  141. }
  142. /**
  143. *將給定的一組數字以給定的操作符按順序進行運算,如:intresult=caculate(newint[]{3,4,5,8},new
  144. *char[]{'+','-','*'});
  145. *
  146. *@paramnums
  147. *一組數字
  148. *@paramoperators
  149. *一組運算符,數量為數字的個數減1
  150. *@return最後的計算結果
  151. *@throwsException
  152. *當計算結果不精確時,拋出該異常,主要是針對除法運算,例如18/8=2,諸如這樣不精確計算將拋出該異常
  153. */
  154. privatestaticintcaculate(int[]nums,char[]operators)throwsException{
  155. intresult=0;
  156. for(inti=0;i<operators.length;i++){
  157. if(i==0){
  158. result=caculate(nums[i],nums[i+1],operators[i]);
  159. }else{
  160. result=caculate(result,nums[i+1],operators[i]);
  161. }
  162. }
  163. returnresult;
  164. }
  165. /**
  166. *根據指定操作符將兩個給定的數字進行計算
  167. *
  168. *@paramnum1
  169. *數字1
  170. *@paramnum2
  171. *數字2
  172. *@paramoperator
  173. *操作符,只能從「+、-、*、/」4個操作符中取值
  174. *@return計算結果
  175. *@throwsException
  176. *當計算結果不精確時,拋出該異常,主要是針對除法運算,例如18/8=2,諸如這樣不精確計算將拋出該異常
  177. */
  178. privatestaticintcaculate(intnum1,intnum2,charoperator)
  179. throwsException{
  180. doubleresult=0;
  181. switch(operator){//根據操作符做相應的計算操作
  182. case'+':
  183. result=num1+num2;
  184. break;
  185. case'-':
  186. result=num1-num2;
  187. break;
  188. case'*':
  189. result=num1*num2;
  190. break;
  191. case'/':
  192. result=(double)num1/(double)num2;
  193. break;
  194. }
  195. if(!check(result))
  196. thrownewException("不精確的計算數字");
  197. return(int)result;
  198. }
  199. /**
  200. *檢查指定的浮點數是否可以直接轉換為整型數字而不損失精度
  201. *
  202. *@paramresult
  203. *要檢查的浮點數
  204. *@return如果可以進行無損轉換,返回true,否則返回false
  205. */
  206. privatestaticbooleancheck(doubleresult){
  207. Stringstr=String.valueOf(result);
  208. intpointIndex=str.indexOf(".");//小數點的下標值
  209. Stringfraction=str.substring(pointIndex+1);
  210. returnfraction.equals("0")?true:false;//通過判斷小數點後是否只有一個0來確定是否可以無損轉換為整型數值
  211. }
  212. /**
  213. *對傳入的整型數組buf進行全排列
  214. *
  215. *@parambuf
  216. *要進行全排列的整型數組
  217. *@paramstart
  218. *開始的下標值
  219. *@paramend
  220. *結束下標值
  221. *@paramlist
  222. *保存最後全排列結果的集合
  223. */
  224. privatestaticvoidallSort(int[]buf,intstart,intend,List<int[]>list){
  225. if(start==end){//當只要求對數組中一個字母進行全排列時,只要就按該數組輸出即可
  226. int[]a=newint[buf.length];
  227. System.array(buf,0,a,0,a.length);
  228. list.add(a);
  229. }else{//多個字母全排列
  230. for(inti=start;i<=end;i++){
  231. inttemp=buf[start];//交換數組第一個元素與後續的元素
  232. buf[start]=buf[i];
  233. buf[i]=temp;
  234. allSort(buf,start+1,end,list);//後續元素遞歸全排列
  235. temp=buf[start];//將交換後的數組還原
  236. buf[start]=buf[i];
  237. buf[i]=temp;
  238. }
  239. }
  240. }
  241. }

8. 想用java寫個24點的游戲、不懂、急求教、

給你兩點提示吧
1)四個數有效的運算順序一共5種,如,(1#2)#(3#4),((1#2)#3)#4為其中的兩種。
2)將四則運算用函數完成,定義eval(int lhs, int rhs, int op),lhs、rhs 為左右操作數,op為操作符,這樣窮舉的時候可以將op從1取到4來完成。

PS:一般玩的24點是可以交換順序的,如果須要可以再寫一個全排列的演算法。

9. JAVA撲克牌湊24點的游戲

要高手才能改

10. 求JAVA 24點游戲演算法,界面和發牌器已弄好,求演算法

package;

importjava.util.Scanner;

publicclassGame21
{
publicstaticvoidmain(String[]args)
{
System.out.println("游戲規則:");
System.out.println("開始游戲後屏幕上將出現一個隨機數字");
System.out.println("按a可以隨機增加一個1-10范圍內的一個數字");
System.out.println("按s則揭曉你和電腦對決的結果!");
System.out.println("如果你的數字大於21點,則游戲直接結束!");
intrand=(int)(Math.random()*10+1);
intsum1=rand,sum2=0,which=0;//0電腦,1我
System.out.println("系統先給出1個數字:"+rand);
System.out.print("輪到你了:");
Scannerscanner=newScanner(System.in);
while(true)
{
Stringinput="";
if(which==0)
{
input=scanner.next();
}
if(which==0&&"a".equals(input))
{
which=1;
intr=(int)(Math.random()*10+1);
sum2+=r;
System.out.println("您抽到的數字是:"+r);
if(sum2>21)
{
System.out.println("你的點數為"+sum2+",超過了最大限制21點,游戲提前結束!");
break;
}
System.out.print("該電腦了:a ");
}
elseif(which==1)
{
which=0;
intr=(int)(Math.random()*10+1);
sum1+=r;
System.out.println("電腦抽到的數字是:"+r);
if(sum1>21)
{
System.out.println("電腦點數為"+sum1+",超過了最大限制21點,游戲提前結束!");
break;
}
System.out.print("輪到你了:");
}
elseif(which==0&&"s".equals(input))
{
System.out.println("電腦共有:"+sum1+"點");
System.out.println("你共有:"+sum2+"點");
if(sum1>sum2)
{
System.out.println("YOULOSE!!!");
}
elseif(sum1<sum2)
{
System.out.println("YOUWIN!!!");
}
else
{
System.out.println("DRAWGAME!!!");
}
System.out.print("輪到你了:");
which=0;
}
}
scanner.close();
}
}

閱讀全文

與24點游戲java相關的資料

熱點內容
程序員戰門課 瀏覽:472
config保存伺服器地址 瀏覽:317
預訂網吧座位的app叫什麼 瀏覽:416
香港伺服器主機地址 瀏覽:640
網店美工pdf 瀏覽:447
一堆文件夾怎麼弄出來 瀏覽:743
博途如何編譯硬體 瀏覽:418
fortran程序pdf 瀏覽:504
電池消耗演算法 瀏覽:394
伺服器中斷連接怎麼處理 瀏覽:222
上世紀互聯網不發達程序員很難 瀏覽:841
語音識別android開源 瀏覽:762
地埋式垃圾壓縮中轉站 瀏覽:902
apachehttpdlinux 瀏覽:944
快遞員中通app預付款是什麼 瀏覽:843
java路徑轉義 瀏覽:857
keytool加密演算法 瀏覽:131
笑臉圖案的APP相機是什麼軟體 瀏覽:249
app軟體為什麼會被下架 瀏覽:981
從內存到硬碟的命令是 瀏覽:52