Java---字符数组与字符串数组的应用

原题:

编写一个猜成语的小游戏。

要求:使用一个字符串数组来保存10个四字成语,例如:

String[] idioms = {“凉拌黄瓜”, “红烧肘子”, …};

使用一个字符数组来保存20个无关字符,例如:

String [] chars = {‘吃’, ‘喝’, ‘胡’, …};

每次游戏开始时,随机选择一个成语,然后提取其中的4个汉字,再从字符数组中随机选择另外6个汉字,组成一个10个汉字的数组(汉字顺序随机)。注意!如果成语中,有重复的汉字,则只算一个,那么要从字符数组中多选出汉字。然后提示用户成语中包含这10个汉字,让用户猜测成语,用户输入汉字的编号,程序反馈汉字在成语中的位置。用户只有6次猜错机会,当6次机会用完后,游戏结束(猜对不占用次数)。当用户完全猜测出成语后,程序输出用户猜错的次数。

提示:使用java.util.Random类产生随机数。使用方法如下(具体方法请参见Java API文档):
Random random = new Random(1000); //参数表示随机数种子
int index = random.nextInt(10); //产生[0,10)之间的随机整数

游戏过程如下:

第一次:

四字成语中包含的汉字如下:
1.王; 2.中; 3.力; 4.习; 5.努; 6.可; 7.时; 8.学; 9.我; 10.成;
[○○○○]
剩余猜测次数为6次,请输入你的猜测:1
对不起,“王”字不在成语中,剩余猜测次数为5次,请再次输入你的猜测:2
对不起,“中”字不在成语中,剩余猜测次数为4次,请再次输入你的猜测:8
[○○学○]
恭喜你,“学”字在成语中的位置是:3
剩余猜测次数为4次,请再次输入你的猜测:9
对不起,“我”字不在成语中,剩余猜测次数为3次,请再次输入你的猜测:9
对不起,“我”字你已经猜过了,剩余猜测次数为2次,请再次输入你的猜测:5
[努○学○]
恭喜你,“努”字在成语中的位置是:1
剩余猜测次数为2次,请再次输入你的猜测:6
对不起,“可”字不在成语中,剩余猜测次数为1次,请再次输入你的猜测:10
对不起,“成”字不在成语中,并且你已经Game Over了!

第二次(假设还是同样的成语):

四字成语中包含的汉字如下:
1.王; 2.中; 3.力; 4.习; 5.努; 6.可; 7.时; 8.学; 9.我; 10.成;
[○○○○]
剩余猜测次数为6次,请输入你的猜测:1
对不起,“王”字不在成语中,剩余猜测次数为5次,请再次输入你的猜测:8
[○○学○]
恭喜你,“学”字在成语中的位置是:3
剩余猜测次数为5次,请再次输入你的猜测:9
对不起,“我”字不在成语中,剩余猜测次数为4次,请再次输入你的猜测:5
[努○学○]
恭喜你,“努”字在成语中的位置是:1
剩余猜测次数为4次,请再次输入你的猜测:3
[努力学○]
恭喜你,“力”字在成语中的位置是:2
剩余猜测次数为4次,请再次输入你的猜测:4
[努力学习]
恭喜你,“习”字在成语中的位置是:4
太棒了!你一共猜错了2次,已经猜出了整个成语!

代码:

package hw_2;
import java.util.Random;
import java.util.Scanner;
public class mask_3 {
 public static void main(String[] args) {
  Scanner in=new Scanner(System.in);
  Game game=new Game();
  char[] a_char=game.plus_char();
  char[] match=game.iii.toCharArray();
  char[] aim= {'○','○','○','○'};
  int ans;
  int t=4;
  boolean is=false;
  int[] times=new int[10];
  System.out.println("四字成语中包含的汉字如下:");
  for(int j=0;j<10;j++) {
   System.out.print(j+"."+a_char[j]+";");
  }
  System.out.println(" ");
  System.out.println("["+aim[0]+aim[1]+aim[2]+aim[3]+"]");
  System.out.print("剩余猜测次数为6次,请输入你的猜测:");
  for(int i=0;i<6;i++) {
   ans=in.nextInt();
   if(times[ans]!=0) {
    System.out.println("对不起,“"+a_char[ans]+"”字你已经猜过了,剩余猜测次数为"+(6-i-1)+"次,请再次输入你的猜测:");
    continue;
   }
   int k=0;
   for(int j=0;j<4;j++) {
    is=false;
    if(a_char[ans]==match[j]) {
     aim[j]=match[j];
     is=true;
     k++;
    }
    if(is&&k==1) {
     System.out.println("["+aim[0]+aim[1]+aim[2]+aim[3]+"]");
     System.out.print("恭喜你,“"+a_char[ans]+"”字在成语中的位置是:"+j);
     i--;
     t--;
    }
    else if(is&&k>1){
     System.out.print(" "+j);
     i--;
     t--;
    }
   }
   if(k>0) {
    System.out.println(" ");
    if(t>0)
    System.out.print("剩余猜测次数为"+(6-i-1)+"次,请再次输入你的猜测:");
   }
   if(k==0) {
    System.out.print("对不起,"+a_char[ans]+"字不在成语中,");
    if(i==5) {
     System.out.print("并且你已经Game Over了!");
    }
    else {
     System.out.print("剩余猜测次数为"+(6-i-1)+"次,请再次输入你的猜测:");
    }
   }
   if(t==0) {
    System.out.println("太棒了!你一共猜错了"+i+"次,已经猜出了整个成语!");
    return;
   }
   times[ans]++;
  }
 }
}
class Game{
 String[] idioms = {"扬名立万","走马观花","春暖花开","一穷二白","千军万马","白手起家","张灯结彩","风和日丽","万里长城","人来人往"};
 String[] chars = {"吃","喝","胡","时","会","海","机","草","王","立"};
 String iii=this.get_idiom();
 //随机产生一个成语;
 public String get_idiom() {
  Random random=new Random(System.currentTimeMillis()); //参数表示随机数种子;
  int index=random.nextInt(10); //产生[0,10)之间的随机整数;
  return this.idioms[index];
 }
 //随机选择六个汉字
 public char[] single_char() {
  char[] ch=new char[6];
  int index;
  int lengths=9;
  for(int i=0;i<6;i++) {
   Random random=new Random(System.currentTimeMillis()); //参数表示随机数种子;
   index=random.nextInt(lengths+1); //产生随机整数;
   ch[i]=chars[index].charAt(0);
   chars=change(chars,index,lengths);   //chars个数不变,用lengths变量储存当前对于此程序来说的有效长度;
   lengths--;
  }
  return ch;
 }
 public String[] change(String[] charr,int index,int lengths) {  //相当于删除第i位(但位数实际上不变);
  String temp=charr[index];  //把当前最后和该字换顺序;
  charr[index]=charr[lengths];
  charr[lengths]=temp;
 
  return charr;
 }
 //将成语四个字分开
 public char[] single_idiom() {
  String ch=this.iii;
  char[] idiom=new char[ch.length()];
  for(int i=0;i<ch.length();i++) {
   idiom[i]=ch.charAt(i);
  }
  return idiom;
 }
 //把取出的十个字随机组合成一个序列;
 public char[] plus_char() {
  char[] idioms=single_idiom();
  char[] charr=single_char();
  char[] a_char=new char[10];
  int num_idiom=4;
  for(int i=0;i<10;i++) {  //初始化待组合数组;
   a_char[i]=' ';
  }
  int index;
  int num=0;
  //判断成语里面的叠字,决定放入数组的字的个数,更改原成语数组
  for(int i=0;i<4;i++) {
   for(int j=i+1;j<4;j++) {
    if(idioms[i]==idioms[j]) {
     idioms[j]=' ';
     num++;
    }
   }
  }
  num_idiom=num_idiom-num;
  num=0;
  char[] idiom=new char[num_idiom];
  for(int i=0;i<4;i++) {
   if(idioms[i]!=' ') {
    idiom[num]=idioms[i];
    num++;
   }
  }
  //把成语里面的字放入数组;
  for(int i=0;i<num_idiom;i++) {
   Random random=new Random(System.currentTimeMillis());
   index=random.nextInt(10);
   if(a_char[index]==' ') {
    a_char[index]=idiom[i];
   }
   else {
    i--;  //如果该数的位置已放有汉字,就重新取随机数;
   }
  }
  //把单字放入数组;
  for(int i=0;i<10-num_idiom;i++) {
   Random random=new Random(System.currentTimeMillis());
   index=random.nextInt(10);
   if(a_char[index]==' ') {
    a_char[index]=charr[i];
   }
   else {
    i--;
   }
  }
  return a_char;
 }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值