黑马程序员技术交流社区

标题: 写的一个猜数字,弄成可以重复的,主要是随机数怎么重置啊? [打印本页]

作者: yasyas001    时间: 2013-6-21 16:25
标题: 写的一个猜数字,弄成可以重复的,主要是随机数怎么重置啊?
import java.util.Scanner;

public class ImportStatic {
        public static void main(String[] args) {
                setNum();

        }

        private static void setNum() {
                int num = (int) (Math.random() * 100) + 1;// 随机数
                Integer count = 0;// 计数器

                System.out.println("请输入一个整数!");
                numberplay(num, count);
        }

        private static void numberplay(int num, Integer count) {

                System.out.println(num);// 随机数测试用
                Scanner sc = new Scanner(System.in);// 输入
                try {
                        int number = sc.nextInt();
                        while (true) {
                                if (number == num) {//正确答案
                                        System.out.println("恭喜用了" + (++count) + "次猜中");
                                        System.out.print("如果继续请按下任意字母");
                                        number = sc.nextInt();
                                        if (number >= 0 | number < 0) {
                                                break;
                                        } else {
                                                num = (int) (Math.random() * 100) + 1;
                                                numberplay(num, count++);
                                        }
                                } else {
                                        while (true) {//错误答案循环输入
                                                System.out.println("继续猜吧" + (++count));
                                                number = sc.nextInt();
                                                if (number == num) {
                                                        break;
                                                } else if (number > num) {
                                                        System.out.println("猜大了-->");
                                                } else if (number < num) {
                                                        System.out.println("小了-->");
                                                }
                                        }
                                }
                        }
                } catch (Exception e) {// 做为输入不是数字返回用
                        System.out.println("输错-->" + (++count));
                        numberplay(num, count++);
                }
        }
}

作者: xiaohu1218    时间: 2013-6-21 18:29
楼主你好:我看了你的程序之后,感觉思路挺清晰的,但是程序的结构有点累赘,按你的需求,自己写了个,你参考下,如何


import java.util.Scanner;

public class GuessNum {
        /**
         * @param args
         */
       
        private static int count= 0;
        private static int num = 0;
        private static int inputNum = 0;       
        private static boolean flag = true;
       
        public static void main(String[] args) {
              
                while(flag)
                {
                        System.out.println("----------游戏开始----------");
                    System.out.println("请输入一个不大于100的正整数:");
                        gameStart();//游戏开始
                       
                         System.out.println("还要继续游戏吗?1(继续游戏)?0(退出游戏)");
                         int y = getInput();
                         if(y == 1)
                         {
                                 System.out.println("继续游戏:");
                         }
                         if (y == 0)
                         {
                                 System.out.println("退出游戏");
                                 break;
                         }
                               
                }
               

        }
        private static void gameStart()
        {
                setNum();//获取随机数
                guessNum();//猜数字
        }

        private static void setNum() {
                num = ((int) (Math.random() * 100))+1 ;// 获取随机数        
                System.out.println(num);//打印测试随机数
        }

        private static int getInput()
        {
                 Scanner sc = new Scanner(System.in);// 获取输入数字
                 inputNum = sc.nextInt();
                 return inputNum;
               
        }
        private static void guessNum()
        {
                int number = getInput();
                 
                 while(number<1 || number>100)//数据合法性判断
                 {
                         System.out.println("输入的数字不合法,请重新输入");
                         number = getInput();
                 }
                 //数据大小判断部分
                 while (true) {
                 
                 if (number == num) //如果猜中,这轮游戏结束
                 {
                         System.out.println("恭喜你猜对了,共猜了" + (++count) + "次");                   
                         break;
                 }
                 else if (number > num)
                 {
                         System.out.println("猜大了,请继续:");
                 }
                 else if (number < num)
                 {
                         System.out.println("猜小了,请继续:");
                 }
                 count++;//猜错后次数+1
                 number = getInput();//重新获取输入
                 }
               
        }
        
}
作者: xiaohu1218    时间: 2013-6-21 18:36
我在主函数中使用了while循环 ,判断是否继续游戏 。
退出游戏时,也可以将  if (y == 0)
                         {
                                 System.out.println("退出游戏");
                                 break;
                         }
中的break 换做
flag = false;
也能达到结束游戏的目的
作者: yasyas001    时间: 2013-6-21 18:40
xiaohu1218 发表于 2013-6-21 18:29
楼主你好:我看了你的程序之后,感觉思路挺清晰的,但是程序的结构有点累赘,按你的需求,自己写了个,你参 ...

你好,这样回有一些BUG的,假如我不小心输入了一个字母,游戏就崩溃了,
不能让他们结束
作者: yasyas001    时间: 2013-6-21 18:45
xiaohu1218 发表于 2013-6-21 18:29
楼主你好:我看了你的程序之后,感觉思路挺清晰的,但是程序的结构有点累赘,按你的需求,自己写了个,你参 ...

谢谢,你解决了我的问题,我稍微改动了下
  1. Scanner sc = new Scanner(System.in);// 获取输入数字
  2.                                  try{
  3.                  inputNum = sc.nextInt();
  4.                                  }catch(Exception e){
  5.                                          System.out.println("输错拉");
  6.                                                 getInput();
  7.                                  }
  8.                                  return inputNum;
复制代码

作者: xiaohu1218    时间: 2013-6-21 21:12
yasyas001 发表于 2013-6-21 18:40
你好,这样回有一些BUG的,假如我不小心输入了一个字母,游戏就崩溃了,
不能让他们结束 ...

这个是我考虑不周,我把getInput方法修改了一下,将数据的合法性判断放在一起了,
private static int getInput()
        {
                 
                 Scanner sc = new Scanner(System.in);// 获取输入数字
                 try
                 {
                         inputNum = sc.nextInt();
                         while(inputNum<1 || inputNum>100)//数据合法性判断
                     {
                             System.out.println("输入的数据大小不合法,请重新输入:");
                             inputNum = sc.nextInt();
                     }
                 }
                 catch(Exception e)
                 {
                         System.out.println("输入数据不合法,出现异常:"+e.toString());
                         System.out.println("请重新输入一个不大于100的正整数:");
                         getInput();
                 }
               
                 
                 return inputNum;
               
        }
作者: 神之梦    时间: 2013-6-22 00:04
非常好!!!!!!!!!!!!!!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2