用java完成唐诗测试游戏:从每句随机去掉一个字_代替,然后将去掉的字组合为4种选项,让用户选择正确答案。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用java完成唐诗测试游戏:从每句随机去掉一个字_代替,然后将去掉的字组合为4种选项,让用户选择正确答案。相关的知识,希望对你有一定的参考价值。

Java程序:

import java.util.Random;

public class Test0201
public static void main(String[] args)
String[] poem = new String[]"赠孟浩然",
"吾爱孟夫子", "风流天下闻",
"红颜弃轩冕", "白首卧松云",
"醉月频中圣", "迷花不事君",
"高山安可仰", "徒此揖清芬";
String[] keys = new String[poem.length-1]; //存储每句中抽出的单字
String[] items = new String[4]; //存储4种备选答案选项
String correctItem;
int i;

drawKey(poem, keys);

correctItem = generateItems(keys, items);

System.out.println("以下唐诗的每一句都少一个字,请选择合适的选项,将各选项中的字接顺序填充后,形成完整的唐诗:\\n");
System.out.println(poem[0]);
for(i=1; i<poem.length; i++)
System.out.println(poem[i] + (i%2==1 ?"," : "。"));

System.out.println();
for(i=0; i<items.length; i++)
System.out.println(items[i]);


System.out.print("\\n正确答案:" + correctItem);


//从各句唐诗中抽取一个字并存储,将该字用“_”代替
public static void drawKey(String[] poem, String[] keys)
int i, pos;
Random rand = new Random();
for(i=1; i<poem.length; i++)
pos=rand.nextInt(poem[i].length());
keys[i-1] = poem[i].substring(pos, pos+1);
poem[i] = poem[i].substring(0, pos) + "_" + poem[i].substring(pos+1);



//组成备选答案选项,返回正确答案
public static String generateItems(String[] keys, String[] items)
Random rand = new Random();
int[] arr;
int n = keys.length;
int pos = rand.nextInt(4); //正确答案的位置
int i, j;
StringBuffer buff = new StringBuffer();

for(i=0; i<n; i++)
buff.append(keys[i]);

items[pos] = (char)(\'A\' + pos) + ". " + buff.toString();
buff.delete(0, n);

for(i=0; i<4; i++)
if(i == pos)
continue;

arr = generateArray(n);
for(j=0; j<n; j++)
buff.append(keys[arr[j]]);

items[i] =(char)(\'A\' + i) + ". " + buff.toString();
buff.delete(0, n);


return items[pos];


//生成由n个数字[0, n-1]组成的随机数数组
private static int[] generateArray(int n)
int[] arr = new int[n];
Random rand = new Random();
int i;
for(i=0; i<n;)
arr[i] = rand.nextInt(n);
if(isExistFigure(arr, i, arr[i]))
continue;

i++;


return arr;


//判断某数字在数组中是否存在
private static boolean isExistFigure(int[] arr, int n, int key)
for(int i=0; i<n; i++)
if(arr[i] == key)
return true;


return false;



运行测试:
第一次测试:
以下唐诗的每一句都少一个字,请选择合适的选项,将各选项中的字接顺序填充后,形成完整的唐诗:

赠孟浩然
吾_孟夫子,
_流天下闻。
红颜弃轩_,
白首卧松_。
醉月频中_,
迷花不事_。
高山安_仰,
_此揖清芬。

A. 爱徒君风可云冕圣
B. 云徒君风冕圣爱可
C. 君冕圣可风云徒爱
D. 爱风冕云圣君可徒

正确答案:D. 爱风冕云圣君可徒

第二次测试:
以下唐诗的每一句都少一个字,请选择合适的选项,将各选项中的字接顺序填充后,形成完整的唐诗:

赠孟浩然
吾爱孟夫_,
风流天下_。
红颜弃_冕,
_首卧松云。
醉月频_圣,
迷花_事君。
高山_可仰,
徒此揖_芬。

A. 不白闻子中轩清安
B. 子闻轩白中不安清
C. 白不闻轩清安子中
D. 清子不白中安轩闻

正确答案:B. 子闻轩白中不安清
参考技术A import java.util.Random;

public class Test
public static void main(String[] args)
String tangshi = "锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦。" ;
char[] c = tangshi.toCharArray() ;
Random ran = new Random() ;
int ran1 = ran.nextInt(4) ;
int ran2 = ran.nextInt(4)+6 ;
int ran3 = ran.nextInt(4)+12 ;
int ran4 = ran.nextInt(4)+18 ;

char[] xuanxiang = new char[4] ;
xuanxiang[0] = c[ran1] ;
c[ran1] = '_' ;
xuanxiang[1] = c[ran2] ;
c[ran2] = '_' ;
xuanxiang[2] = c[ran3] ;
c[ran3] = '_' ;
xuanxiang[3] = c[ran4] ;
c[ran4] = '_' ;

for(int i=0; i<c.length ; i++)
System.out.print(c[i]) ;
if((i==5)||(i==11)||(i==17)||(i==23))
System.out.println() ;


int [] abcd = getABCD() ;
System.out.print("A、"+xuanxiang[abcd[0]]+" ");
System.out.print("B、"+xuanxiang[abcd[1]]+" ");
System.out.print("C、"+xuanxiang[abcd[2]]+" ");
System.out.print("D、"+xuanxiang[abcd[3]]);



public static int[] getABCD()
int[] c = new int[4] ;
Random ran = new Random() ;
boolean flag = true ;

while(flag)
c[0] = ran.nextInt(4) ;
c[1] = ran.nextInt(4) ;
if(c[0] != c[1])
c[2] = ran.nextInt(4) ;
if((c[0]!=c[2])&&(c[1]!=c[2]))
c[3] = ran.nextInt(4) ;
if((c[0]!=c[3])&&(c[1]!=c[3])&&(c[2]!=c[3]))
flag=false ;







return c;



如果是7字的诗你就自己修改吧!呵呵!
参考技术B 给我几首唐诗。。。。

Java完成简单猜数字游戏

猜数字游戏v1.0 实现了自定义区间的游戏玩法,并能在游戏结束后继续下一轮,这是其他程序没有兼顾的,希望有帮助,最后也希望有人愿意帮我解决代码优化的问题,谢谢。

/*需求:
*1. 完成一个猜数字游戏,数据区间由玩家自定义,游戏开始后针对玩家输入的值,给出一个缩小版的指导区间;
*2. 结束一轮游戏后,玩家可以选择是否继续玩耍;
*思路:
*1. 创建一个指定区间int类型的随机数,区间由玩家指定;
*2. 针对玩家猜的数据,比较后给出判断,大了、小了可以给出一个指导区间,直到猜对为止,记录猜的次数;
*3. 游戏结束后,询问玩家是否继续;
*步骤:
*1. 利用Scanner,由玩家创建游戏区间;
*2. 利用while中嵌套for,对结果作出判断,并给出一个新的指导区间;
*3. 游戏结束后,提示玩家输入yes字符串继续游戏;
*=========新人求优化=========
*1. 程序中,获取随机数部分是重复的,如果有大神能写一个getRandom获取随机数,并能继续使用min、max的值就更好了;
*2. while循环中,对输入数据超出边界时有一个if判断,此处应该有更简洁的方法。
*=========菜鸟求帮助=========
*/

 1 import java.util.*;
 2 public class GuessGame {
 3     public static void main(String[] args)
 4     {
 5         //确认竞猜数据的下限
 6         Scanner guessMin = new Scanner(System.in);
 7         System.out.println("欢迎来到猜数字游戏v1.0!\n请输入你要竞猜数据的下限:");
 8         int min = guessMin.nextInt();
 9         //确认竞猜数据的上限
10         Scanner guessMax = new Scanner(System.in);
11         System.out.println("请输入你要竞猜数据的上限:");
12         int max = guessMax.nextInt();
13         //产生一个指定区间的随机数,Math.random()生成一个[0,1)之间的double类型的随机数。
14         int givenNumber = (int)(Math.random()*(max-min+1)) + min;
15         //System.out.println("系统已生成的随机数:"+givenNumber);//测试时可取消注释
16         System.out.println("系统已生成一个[" + min + "," + max + "]区间的随机数,来竞猜吧!");
17         //引入count,用来计算输入次数
18         int count = 0;
19         while (true) 
20         {
21             //玩家输入猜想的数据
22             Scanner sc = new Scanner(System.in);
23             try 
24             {
25                 System.out.println("在这个给定区间,[" + min + "," + max + "]"+",请输入你所猜想的数据:");
26                 count++;
27                 int guessNumber = sc.nextInt();
28                 //大于判断,将max-1的目的是为了更加精准范围
29                 if (guessNumber > givenNumber) 
30                 {
31                     //++++++++++++++
32                     //待优化,此处是针对输入值超出上限时的一个判断,避免误导玩家
33                     if (guessNumber > max)
34                     {}
35                     else
36                     {max = guessNumber-1;}
37                     //++++++++++++++
38                     System.out.println("太可惜了,您在第" + count + "次猜大了,请继续:");
39                 } 
40                 //小于判断,将min+1的目的是为了更加精准范围
41                 else if (guessNumber < givenNumber)
42                 {
43                     //++++++++++++++
44                     //待优化,此处是针对输入值超出下限时的一个判断,避免误导玩家
45                     if (guessNumber < min)
46                     {}
47                     else
48                     {min = guessNumber+1;}
49                     //++++++++++++++
50                     System.out.println("太可惜了,您在第" + count + "次猜小了,请继续:");
51                 } 
52                 //等于判断,并询问是否继续游戏
53                 else
54                 {
55                     System.out.println("太赞了,您花了" + count + "次就猜中了这个随机数," + givenNumber + "。");
56                     //是否继续游戏
57                     System.out.println("\n输入yes继续挑战,按任意键退出。\n");
58                     sc = new Scanner(System.in);
59                     String str = sc.nextLine();
60                     if ("yes".equals(str)) 
61                     {
62                         //++++++++++++++
63                         //待优化,重写赋值随机数,如果能写一个getRandom获取随机数,并能继续使用min、max的值就更好了。
64                         //确认竞猜数据的下限
65                         Scanner _guessMin = new Scanner(System.in);
66                         System.out.println("欢迎来到猜数字游戏v1.0!\n请输入你要竞猜数据的下限:");
67                         min = _guessMin.nextInt();
68                         //确认竞猜数据的上限
69                         Scanner _guessMax = new Scanner(System.in);
70                         System.out.println("请输入你要竞猜数据的上限:");
71                         max = _guessMax.nextInt();
72                         //产生一个指定区间的随机数,Math.random()生成一个[0,1)之间的double类型的随机数。
73                         givenNumber = (int)(Math.random()*(max-min+1)) + min;
74                         //System.out.println("系统已生成的随机数:"+givenNumber);//测试时可取消注释
75                         System.out.println("系统已生成一个[" + min + "," + max + "]区间的随机数,莱竞猜吧!");
76                         //引入count,用来计算输入次数
77                         count = 0;
78                         //++++++++++++++
79                     } 
80                     else
81                     {
82                         System.out.println("欢迎使用猜数字游戏v1.0,再见!");
83                         break;
84                     }
85                 }
86             } 
87             catch (InputMismatchException e) 
88             {
89                 System.out.println("你输入的数据有误,请重新输入一个整数。");
90             }
91         }
92     }
93  }

 
















以上是关于用java完成唐诗测试游戏:从每句随机去掉一个字_代替,然后将去掉的字组合为4种选项,让用户选择正确答案。的主要内容,如果未能解决你的问题,请参考以下文章

java实验之猜数游戏

java课堂_动手动脑4

填字游戏搜索的最佳数据结构

华为机试:明明的随机数

猜数游戏

猜数游戏