用Java编程实现一个猜数字的游戏:系统随机产生一个1~100的数字,然后让玩家猜测这个数字,如果玩家猜错,

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Java编程实现一个猜数字的游戏:系统随机产生一个1~100的数字,然后让玩家猜测这个数字,如果玩家猜错,相关的知识,希望对你有一定的参考价值。

1.int num = (int)(Math.random()*100+1);//随机得出一个1~100的数
2.用一个变量去接收玩家输入的数,例如int i;
3.用if语句,当玩家输入的数与随机数相等时(i==num),则输出语句(恭喜你猜对了).
4.用else写出猜错是的语句.
大致思路就是这样.建议你自己去写,只有自己写过才会懂.如有不懂的M我,本人也在学习中,大家可以相互讨论讨论.另外你可以把数字设置成1~10;这样的话比较容易出现猜对的情况,方便你验证程序是否正确,然后再改成1~100;
最后在说下Math.random(),这个方法得到是一个0~1之间的随机小数(不包括1但包括0),所以(0~1)*100=0~100(但是不包括100),然后+1就得出1~100了;因为Math.random()是个小数所以用int强转.
参考技术A 你是不是没有写完啊。1-100间的随机数字:int num1=(int)(Math.random()*100+1); 参考技术B import java.util.Scanner;

public class guess

public static void main(String[] args)
Scanner scan = new Scanner(System.in);
System.out.println("请输入一个1~100之间的整数!");
int j = (int) (Math.random() * 100 + 1);
while (true)
int i = scan.nextInt();
if (i > j)
System.out.println("您猜的数大了");
System.out.println("请继续输入!");
else if (i < j)
System.out.println("您猜的数小了");
System.out.println("请继续输入!");
else
System.out.println("恭喜您猜对了");
System.out.println("这个数是:"+i);
break;



参考技术C public static void main(String[] args) throws Exception
/*判断*/
Random r = new Random(100);
int ranbow = r.nextInt(100);
System.out.print("请输入您猜的数字吧:");

while(1==1)
if(startGame(ranbow))
break;




public static Boolean startGame(int random) throws Exception
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String strNum = reader.readLine();
if(!strNum.equals(String.valueOf(random)))
System.out.print("猜错啦!继续吧");
return false;
else
System.out.print("恭喜,对啦!");
return true;

参考技术D int n=100;
int j=0;
while(j<n)

System.out.print(rand.nextInt());
j++;


试试

求解编程题目<猜数字>C++/C

Description

猜数字游戏是文曲星上的一款打发时间的小游戏。游戏的规则是这样的:计算机随机产生一个四位数,然后玩家猜这个四位数是什么。每猜一个数,计算机都会告诉玩家猜对几个数字,其中有几个数字在正确的位置上。
比如计算机随机产生的数字为1122。如果玩家猜1234,因为1,2这两个数字同时存在于这两个数中,而且1在这两个数中的位置是相同的,所以计算机会告诉玩家猜对了2个数字,其中一个在正确的位置。如果玩家猜1111,那么计算机会告诉他猜对2个数字,有2个在正确的位置。
现在给你一段猜数字的过程,你的任务是根据这段对话确定这个四位数是什么。

Input

输入第一行为一个正整数N(1<=N<=10),表示在这段对话中共有N次问答(不允许出现重复问答)。在接下来的N行中,每行三个整数A,B,C。游戏者猜这个四位数为A,然后计算机回答猜对了B个数字,其中C个在正确的位置上。

Output

一行,如果根据这段对话能确定这个四位数,则输出这个四位数,若不能,则输出"Not sure"。

Sample Input

6
4815 2 1
5716 1 0
7842 1 0
4901 0 0
8585 3 3
8555 3 2

Sample Output

3585

我觉得解决这个问题有几点要注意:实现方面:生成随机数、防止待猜测的数中重复数字
异常方面:处理输入不为四位的情况。
我练习输入输出、类型转换的时候做过一个类似功能的,但是有些地方不完善。
guess0.cpp
// Guess0.cpp : Defines the entry point for the console application.
//

//最后一次正确时,运行不正确

//猜数字
//产生的随机数每次都是1740,而给result赋值时每次都是1242。
//前者原因:rand的问题,该方法需要与srand一起使用;后者是类型转化过程出错

//可以考虑加上时间,按照时间长短给予不同提示。

#include "StdAfx.h"
#include "head.h"

#include <string.h>
#include <stdlib.h>
#include <afx.h>

#define ARRAY_SIZE 4 //宏,定义要猜的数字位数,默认为4,可以修改
#define CHANCE 10 //可以猜测的次数

char result[ARRAY_SIZE+1]=0;//要猜的数字数组;多定义一位,用于存储结束符
int counter = 0;//记录次数,不得大于CHANCE

int main(int argc, char* argv[])

char ans;
do
process();
printf("是否继续?(是,输入“y”;否输入“n”)");
scanf("%c",&ans);
fflush(stdin);
while(ans=='y'||ans=='Y');
return 0;


void myRand()//生成一个4位数字
//应该在初始化中首次调用此方法
//把值传给result时容易出错,注意选择方式
//先 生成随机数,截取其各位数字,当有重复时重新生成。
memset(result,0,ARRAY_SIZE);
result[ARRAY_SIZE] = 0;
int i,j;
int nums[ARRAY_SIZE];//中间数组
memset(nums,0,ARRAY_SIZE);

char temp[ARRAY_SIZE][1];//注意!temp[]以及它以后的存储区域都是连续的,不能用temp首地址输出。
for(i=0;i<ARRAY_SIZE;i++)

memset(temp[i],'\0',1);


srand((unsigned)time(NULL));//使从当前时刻开始生成的随机数不存在重复
//若无此语句,程序每次执行,产生的随机数是按照顺序来的,依次为1740,9482。。。
for (i=0;i<ARRAY_SIZE;i++)

nums[i] = rand();
nums[i] = nums[i]%10;

for (j=0;j<i;j++) //消除重复数字
//新生成的数字要和前面所有数字比较
while(nums[i]==nums[j]) //遇到重复数字时,重新生成;
//此处不可用if,因为重新生成的数字也需要比较一次
nums[i] = rand();
nums[i] = nums[i]%10;
j=0; //一旦重新生成就重新开始比较,计数置0


sprintf(temp[i],"%d",nums[i]);
result[i] = temp[i][0];//把处理好的数字赋给result


result[ARRAY_SIZE] = '0'; //结束符


void process()//将获得的数字与已生成数字比较

//在菜单中说明
printf("欢迎进入本游戏。\n");
printf("程序将随机生成一个不含重复数字的四位数,然后请您猜测这个四位数。\n");
printf("在猜测的过程中我讲给您适当提示,其中\n");
printf("A代表结果中有且位置正确的数字,B代表结果中有但位置不正确的数字。\n");
printf("在一次游戏结束后,您可以查看结果或者重新开始。\n");

/*
CString inpt;//下面的GetAt调用出现问题,给inpt赋值可以解决
//但是赋值比如为0的话,又会提示长度不对;赋值为0000的话会提示重复数字
//明明在读入的时候,初始赋值已经改变了。
//调试发现虽然inpt已经获得了输入,但是其长度却未改变,应该是接受输入的过程出错
//根本原因在于用scanf读入CString对象的值。虽然能读入,但那只是一个临时值,随时
//会发生“不可预知”的错误。
//所以,改用字符数组或者字符指针实现这一问题
*/
/* //使用字符指针
char *inpt;//缓存输入
inpt = (char *)malloc(ARRAY_SIZE+1);
……
free(inpt);
*/
char inpt[]=0,0,0,'-',0;
char ans=NULL;
do

myRand();
printf("请输入一个不含重复数字的%d位数(多于四位将只处理前四位):\n", ARRAY_SIZE);

int count1 = 0, //结果中含该数字、位置正确,即A的值
count2 = 0;//结果中含该数字、位置不正确,即B的值
while(counter<CHANCE)

scanf("%s",inpt);
fflush(stdin);

while (judge_length(inpt)||judge_repeat(inpt))

printf("请重新输入:\n");
scanf("%s",inpt);
fflush(stdin);


int i,j;
count1 = 0;
count2 = 0;
for (i=0;i<ARRAY_SIZE;i++)

for (j=0;j<ARRAY_SIZE;j++)

if (inpt[j]==result[i])

if (i!=j)
count2++;
else
count1++;




if (count1==ARRAY_SIZE)

printf("恭喜您,猜对了!\n");
break;

else

printf("%s %d%c%d%c\n",inpt, count1, 'A', count2, 'B');

counter++;

if (counter==CHANCE)

printf("对不起,您已经用完了10次机会!您可以查看结果或者重新开始。");
printf("您可以输入0来查看正确结果。\n");
char choice;
scanf("%c",&choice);
if (choice=='0')

printf("正确结果是%s\n",result);


counter=0;

printf("继续?(y/n)\n");
scanf("%c",&ans);
fflush(stdin);
while (ans=='y'||ans=='Y');


bool judge_repeat(char inpt[])//判断有无重复数字

int i,j;
for(i=0;i<ARRAY_SIZE;i++)

for (j=0;j<i;j++)

if (inpt[i]==inpt[j])

printf("您的输入含有重复数字。\n");
return true;



return false;


bool judge_length(char inpt[])//判断输入数字的位数

if (inpt[ARRAY_SIZE-1]=='-')//如果C/C++数组名可以调用类似length的
//函数,那样实现比较理想
//在声明inpt多加一位,加上条件inpt[ARRAY_SIZE]!=(指定字符),应该可以处理超出的输入
printf("您的输入长度不对。\n");
printf("inpt[ARRAY_SIZE-1] = %c\n",inpt[ARRAY_SIZE-1]);
printf("inpt[ARRAY_SIZE] = %c",inpt[ARRAY_SIZE]);
return true;

return false;


guess0.h
#include "StdAfx.h"
#include <afx.h>

void process();
bool judge_repeat(char inp[]);
bool judge_length(char inp[]);
参考技术A #include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main()

int stime,a,z,t,i,c,m,g,s,j,k,l[4]; /*j:数字正确的位数 k:位置正确的位数*/
long ltime;
ltime=time(NULL); /*l:数字相同时,人所猜中数字的正确位置*/
stime=(unsigned int)ltime/2;
srand(stime);
z=random(9999); /*计算机想一个随机数*/
printf("I have a number with 4 digits in mind,please guess.\n");
for(c=1;;c++) /*c: 猜数次数计数器*/

printf("Enter a number with 4 digits:");
scanf("%d",&g); /*请人猜*/
a=z;j=0;k=0;l[0]=l[1]=l[2]=l[3]=0;
for(i=1;i<5;i++) /*i:原数中的第i位数。个位为第一位,千位为第4位*/

s=g;m=1;
for(t=1;t<5;t++) /*人所猜想的数*/

if(a%10==s%10) /*若第i位与人猜的第t位相同*/

if(m&&t!=l[0]&&t!=l[1]&&t!=l[2]&&t!=l[3])

j++;m=0;l[j-1]=t; /*若该位置上的数字尚未与其它数字“相同”*/
/*记录相同数字时,该数字在所猜数字中的位置*/

if(i==t) k++; /*若位置也相同,则计数器k加1*/

s/=10;

a/=10;

printf("You hane correctly guessed %d digits,\n",j);
printf("and correctly guessed %d digits in exact position.\n",k);
if(k==4) break; /*若位置全部正确,则人猜对了,退出*/

printf("Now you have correctly guessed the whole number after %d times.\n",c);
参考技术B 悬赏分0...给个正确答案吧。谢谢。好幸苦的
#include<iostream>
#include<cmath>
using namespace std;
int main()

int n,x[10][4],a[10],b[10],sum=0,ans;
int check[10][10]=0;
cin>>n;
for(int i=0;i<n;i++)

cin.ignore();
for(int j=3;j>=0;j--)x[i][j]=cin.get()-'0',check[i][x[i][j]]++;
cin>>a[i]>>b[i];

for(int i=0;i<10000;i++)
for(int j=0;j<n;j++)

int now[10]=0,A=0,B=0;
for(int k=0;k<4;k++)

now[i/(int)pow(10.0,k)%10]++;
if(i/(int)pow(10.0,k)%10==x[j][k])B++;

for(int k=0;k<10;k++)A+=min(now[k],check[j][k]);
if(A!=a[j]||B!=b[j])break;
if(j==n-1)sum++,ans=i;

if(sum==0)cout<<"No answer!";
else if(sum==1)cout<<ans;
else cout<<"Not sure";
system("pause");
return 0;
本回答被提问者采纳

以上是关于用Java编程实现一个猜数字的游戏:系统随机产生一个1~100的数字,然后让玩家猜测这个数字,如果玩家猜错,的主要内容,如果未能解决你的问题,请参考以下文章

用C#编写猜数字游戏,

JAVA学期末了,老师让在JBUILder里做一个类似猜数字的小游戏,利用Math.random(),随机产生0-9的整数,但

用Java编程这个猜数字游戏

怎么使用java编程: 1、 随机产生一个1-100(小于100)内的整数,由用户通过键盘输入来猜,当从

使用C语言编写猜数字问题

猜数字游戏,判断输入的数字与系统产生的数字是否一致(Math.random()与if嵌套循环)