小白求大神帮忙看看这个空指针异常!!改来改去都不对!!要哭了...简易扑克牌游戏....

package com.immoc.poker_game;
/**
 *创建扑克牌类
 *纸牌类包含:1.属性: 花色、点数    
 */
public class Cards {
	public String suit;//纸牌花色
	public String points;//纸牌点数
	/*
	 * 在构造器中初始化属性
	 */
	public Cards(String suit,String points){
		super();
		this.suit = suit;
		this.points = points;
	}
	public String getSuit() {
		return suit;
	}
	public String getPoints() {
		return points;
	}
	
	
	
}
package com.immoc.poker_game;

import java.util.ArrayList;
import java.util.List;

/**
 * 创建玩家类
 * 玩家类包含: 1.属性:玩家昵称   2.集合:保存玩家的手牌
 * 注意:玩家手牌cards为游戏通过发牌后到达玩家手中的牌,不可重复
 */
public class Player {
	public String playerName;//玩家昵称
	public List<Cards> cards; //玩家手牌
	/*
	 * 在构造器中初始化属性
	 */
	public Player(String playerName){
		this.playerName = playerName;
	}
}

package com.immoc.poker_game;

import java.util.Comparator;
/**
 * 比较规则类
 */
public  class Compara implements Comparator<Cards>{
	
	public int compare(Cards arg0, Cards arg1) {
		String suit = "方块 梅花 红桃 黑桃";
		String points = "2 3 4 5 6 7 8 9 10 J Q K A";
		//先比较点数
		int result = points.indexOf(arg0.getPoints()) - points.indexOf(arg1.getPoints());
		if(result < 0){
			return -1;
		}else if(result > 0){
			return 1;
		}else{//若点数相等,则比较花色
			int result2 = suit.indexOf(arg0.getSuit()) - suit.indexOf(arg1.getSuit());
			if(result2 > 0){
				return 1;
			}else if(result2 < 0){
				return -1;
			}else{
				return 0;
			}
		}
	}
	
}

package com.immoc.poker_game;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

/**
 * 运行游戏类
 */
public class GameBegin {
	private static Scanner console = new Scanner(System.in);   //接收从键盘输入的数据
	private Random random = new Random();					   //产生随机数
	private List<Cards> cardsList = new ArrayList<Cards>();	   //一副扑克牌(所有扑克牌集合)
	private static Player playA;
	private static Player playB;
	public static void main(String[] args) {
		GameBegin gb = new GameBegin();
		gb.createCardsList();
		System.out.println("----------游戏开始!-----------");
		System.out.println("玩家A您好,请输入您的游戏昵称:");
		String nameA = console.next();
		playA = gb.getPlayer(nameA);
		System.out.println("玩家B您好,请输入您的游戏昵称:");
		String nameB = console.next();
		playB = gb.getPlayer(nameB);
		gb.lastTEST();
    }
	/**
	 * 创建扑克牌
	 */
	public List<Cards> createCardsList(){
		String[] suit = {"方块","梅花 ","红桃","黑桃"};
		String[] points = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
		for(String temp:suit){
			for(int i = 0;i < points.length;i++){
				Cards card = new Cards(temp, points[i]);
				cardsList.add(card);
			}
		}
		mixCardsList();  //洗牌
		return cardsList;
	}
	/**
	 * 洗牌
	 * Collections.shuffle()方法的作用是打乱集合中的元素
	 */
	public void mixCardsList(){
		Collections.shuffle(cardsList);
	}
	/**
	 * 创建玩家
	 */
	public Player getPlayer(String playerName){
		//通过有参构造器创建玩家对象
		Player play = new Player(playerName);
		for(int i = 0;i < 2;i++){  //手牌总数:2张
			/*
			 * 玩家拿牌
			 * 总的纸牌集合cardsList通过get()方法获取getRandomSuit()方法中产生的随机点数
			 * 玩家对象play通过玩家手牌集合cards调用add()方法将取得的随机点数添加进玩家手牌集合cards中
			 */
			play.cards.add(cardsList.get(getRandomSuit()));  //玩家拿牌
		}
		System.out.println(play);
		outputPlayerCards(play);
		return play;
		
	}
	/**
	 * 发牌 -- 产生随机点数
	 */
	public int getRandomSuit(){
		int k;
		k = random.nextInt(51);  //产生一个随机点数。52张牌,52个元素,共51个索引
		return k;
	}
	/**
	 * 显示玩家拿到的牌
	 */
	public void outputPlayerCards(Player play){
		System.out.println("您获得的手牌为:");
		for(Cards card:play.cards){  
			System.out.println(card.getSuit()+""+card.getPoints()+"   ");
		}
		Collections.sort(play.cards, new Compara());
		System.out.println("您手中的最大的手牌为:"+play.cards.get(1).getSuit()+play.cards.get(1).getPoints());
	}
	/**
	 * 得到两个玩家中最大的牌,分出胜负
	 */
	public void lastTEST(){
		List<Cards> lastCards = new ArrayList<Cards>(); //保存两个玩家最大的手牌
		lastCards.add(playA.cards.get(1));
		lastCards.add(playB.cards.get(1));
		//对两个玩家最大的手牌进行排序比较
		Collections.sort(lastCards, new Compara());
		System.out.println("最大手牌:"+lastCards.get(1).getSuit()+lastCards.get(1).getPoints());
		if(lastCards.get(1).getSuit().equals(playA.cards.get(1).getSuit()) &&
				lastCards.get(1).getPoints().equals(playA.cards.get(1).getPoints()) ){
			System.out.println(playA.playerName+"胜利!");
		}else{
			System.out.println(playB.playerName+"胜利!");
		}
	}
}
其中
playA = gb.getPlayer(nameA);
play.cards.add(cardsList.get(getRandomSuit()));  //玩家拿牌

两行代码出现空指针异常,我找来找去反复五六遍也没找到哪里错了。。。呜呜呜呜。。。。

目前本人还是一名java小白,求各位大神帮助啊!!这写代码大部分是参考一位名叫Bazingaea的博主写的...,可是他的能正常实现,我的却出现异常了....





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值