A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 遗忘 中级黑马   /  2013-10-4 12:51  /  1704 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 遗忘 于 2013-10-4 13:45 编辑

import java.util.*;
public class StartGuess {

        /**
         * 人机猜拳
         * @param args
         */
        public static void main(String[] args) {
                Game game = new Game();
                game.startGame();
        }
}

class Person
{
        /**
         * 用户类
         */
        String name = "匿名";
        //int score = 0;
        public int showFist(){
                Scanner input = new Scanner(System.in);
                System.out.print("请出拳:1.剪刀 2.石头 3. 布(输入相应的数字):");
                int show = input.nextInt();
                switch(show){
                        case 1 :
                                System.out.println(name +"出拳:剪刀");
                        break;
                        case 2 :
                                System.out.println(name +"出拳:石头");
                        break;
                        case 3 :
                                System.out.println(name +"出拳:布");
                        break;
                }
                return show;               
        }
}

class Computer
{
        /**
         * 计算机类
         */
        String name = "匿名";
        int score = 0;
        public int showFist(){
                int show = (int)( Math.random()*10)%3 + 1;
                switch(show){
                        case 1 :
                                System.out.println(name +"出拳:剪刀");
                        break;
                        case 2 :
                                System.out.println(name +"出拳:石头");
                        break;
                        case 3 :
                                System.out.println(name +"出拳:布");
                        break;
                }
                return show;
                        
        }
}

class Game
{
        /**
         * 开始游戏
         */
        Person person;
        Computer computer ;
        /**
         * 初始化*/
        public void initial(){
                Person person = new Person();     //用户
                Computer computer = new Computer(); //电脑
        }

        public void startGame(){
                initial();
                System.out.println("----------------欢 迎 进 入 游 戏 世 界----------------");
                System.out.println("\n\t\t******************");
                System.out.println  ("\t\t**  猜拳, 开始      **");
                System.out.println  ("\t\t******************");
               
                System.out.println("\n出拳规则:1.剪刀 2.石头 3.布");
               
                Scanner input = new Scanner(System.in);
                System.out.print("请选择对战人物: 1.曹操  2.刘备 3.孙权   :");
                int num = input.nextInt();
                if(num == 1){
                        computer.name = "曹操";        
                }else if(num==2){
                        computer.name = "刘备";        
                }else if(num == 3){
                        computer.name = "孙权";
                }
                        
                System.out.print("请输入姓名:");
                person.name = input.next();
                System.out.println(person.name+"  VS  "+computer.name+"  对战\n");
               
                System.out.print("\n要开始吗?(y/n): ");
                String con = input.next();
                int perFist;   //用户出的拳
                int compFist;  //计算机出的拳
                if(con.equals("y")){
                        /*出拳*/
                        perFist = person.showFist();
                        compFist = computer.showFist();
                        /*裁决*/
                        if((perFist == 1 && compFist == 1) || (perFist == 2 && compFist == 2) || (perFist == 3 && compFist == 3)){
                                System.out.println("结果:和局,真衰!\n");  //平局
                        }else if((perFist == 1 && compFist == 3) || (perFist == 2  && compFist == 1) || (perFist == 3 && compFist == 2)){
                                System.out.println("结果: 恭喜, 你赢了!");  //用户赢                                
                        }else{
                                System.out.println("结果说:^_^,你输了,真笨!\n");  //计算机赢                                
                        }
                }        
        }
}




评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

6 个回复

倒序浏览
本帖最后由 摄影勾魂 于 2013-10-4 13:39 编辑

错在这个地方了:
  1.         Person person;
  2.         Computer computer ;
  3.         /**
  4.          * 初始化*/
  5.         public void initial(){
  6.                Person person = new Person();     //用户   
  7.                Computer computer = new Computer(); //电脑
  8.         }
复制代码
在你的代码中,1、2行是成员变量,6、7行是局部变量。虽然局部变量有具体的实例,可跟成员变量没关系,你的成员变量依然指向为NULL,所以在后面使用computer.name(这里的computer用的是成员变量,person类似)时,出现了空指针异常。
改成:
  1.         Person person;
  2.         Computer computer ;
  3.         /**
  4.          * 初始化*/
  5.         public void initial(){
  6.                 person = new Person();     //用户   
  7.                 computer = new Computer(); //电脑
  8.         }                  
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
,空指针异常,可以断点调试,看看你出现空指针那行的变量哪个是NULL
就知道哪里没有给对象地址了
回复 使用道具 举报
摄影勾魂 发表于 2013-10-4 13:22
错在这个地方了:在你的代码中,1、2行是成员变量,6、7行是局部变量。虽然局部变量有具体的实例,可跟成员 ...

谢谢 明白了
回复 使用道具 举报
lizhangzhi 发表于 2013-10-4 13:40
,空指针异常,可以断点调试,看看你出现空指针那行的变量哪个是NULL
就知道哪里没有给对象地址了 ...

多谢了{:soso_e100:}
回复 使用道具 举报
在你初始化的时候你重新定义了局部变量person和computer,初始化结束后两个变量就不存在了。
而你在class Game中定义的属性person和computer依然没有被赋值,所以程序报了空指针异常正确处理是将
/*Person*/ person = new Person();     //用户
/* Computer*/ computer = new Computer(); //电脑
两个注释内的声明去掉

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报

{:soso_e113:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马