注意
本文最后更新于 2023-12-08,文中内容可能已过时。
大一刚学 c 的时候以前写过 c 语言版 的。
Math: 针对数学进行运算的类 特点:没有构造方法,因为它的成员都是静态的 产生随机数:
public static double random(): 产生随机数,范围 [0.0,1.0) 产生 1-100 之间的随机数
int number = (int)(Math.random()*100)+1; 猜数字小游戏案例 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class MathDemo {
public static void main ( String [] args ) {
//获取随机数
//double d = Math.random();
//System.out.println(d);
/*
for(int x=0; x<10; x++) {
//System.out.println(Math.random());
System.out.println(Math.random()*100);
}
*/
//我们如何获取 1-100 之间的随机数呢?
for ( int x = 0 ; x < 100 ; x ++ ) {
int number = ( int )( Math . random () * 100 ) + 1 ;
System . out . println ( number );
}
}
}
0.1 小游戏
该游戏可以由程序随机产生或由用户输入四个 0 到 9 之间的数字,且不重复。玩游戏者通过游戏提示输入八次来匹配上面所输入的数字。A 表示位置正确且数字正确,B 表示数字正确而位置不正确。 算法: 可以直接算出 A 类的数目,但是 B 类的数目直接算出或许会很麻烦,正好我们可以先算出 C 类数目恰好减去 A 类就是 B 类了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package caishuzi ;
import java.util.Scanner ;
class Num {
private int [] a = { 0 , 0 , 0 , 0 };
public Num () {}
public void setx () {
/*for(int i=0;i<4;i++) {
a[i]=(int)(Math.random()*10);
}*/
//为了四个互不相同的随机数
a [ 0 ]= ( int ) Math . random () * 10 + 1 ;
for ( int i = 1 ; i < 4 ; i ++ ) {
int t = ( int )( Math . random () * 10 );
for ( int j = 0 ; j < i ; j ++ ) {
if ( t == a [ j ] ) {
t = ( int )( Math . random () * 10 );
j = 0 ;
}
}
a [ i ]= t ;
}
}
public int [] getx () {
return a ;
}
public void show () {
System . out . println ();
for ( int i = 0 ; i < 4 ; i ++ )
System . out . print ( a [ i ]+ " " );
System . out . println ();
}
}
public class caishuzi {
public static void main ( String agrs [] ) {
int a [] = { 0 , 0 , 0 , 0 }, b [] = { 0 , 0 , 0 , 0 };
System . out . println ( "* * * *\n 请输入 4 个数字!A 表示位置数字都正确,B 表示数字正确位置错误。" );
Scanner sc = new Scanner ( System . in );
Num n = new Num ();
n . setx ();
a = n . getx ();
/*for(int i=0;i<4;i++)
System.out.print(a[i]+" ");
n.show();*/
for ( int k = 0 ; k < 10 ; k ++ ) { //猜测次数
int A = 0 , B = 0 , C = 0 ;
for ( int i = 0 ; i < 4 ; i ++ ) {
b [ i ]= sc . nextInt ();
}
sc . close ();
for ( int i = 0 ; i < 4 ; i ++ ){
if ( b [ i ]== a [ i ] ) A ++ ;
for ( int j = 0 ; j < 4 ; j ++ ){
C = b [ i ]== a [ j ]?++ C : C ; //C 表示猜测数内和随机数中 A 类和 B 类数的数目
if ( b [ i ]== a [ j ] ) break ;
}
}
B = C - A ; // 关键算法(感叹数学魅力)
if ( A == 4 ) {
System . out . println ( "恭喜猜对啦!" );
} else {
System . out . println ( A + "A" + B + "B" );
}
}
}
}
0.2 一次游戏过程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
* * * *
请输入 4 个数字!A 表示位置数字都正确,B 表示数字正确位置错误。
0 1 2 3
0A1B
0 1 2 4
0A1B
0 1 2 5
1A1B
6 1 2 5
1A2B
1 6 2 5
3A0B
1 6 7 5
恭喜猜对啦!