为了账号安全,请及时绑定邮箱和手机立即绑定

各位能帮我看下为什么我用遍历set时会直接跳过这段代码呢?

public void sendCard()
{
	Scanner show=new Scanner(System.in);
	//player是玩家类,其中纸牌属性设置为set型
	Palyer []player=new Palyer[2];
	for(int i=0;i<2;i++)
	{
		System.out.println("请输入玩家id: ");
		String id=show.next();
		System.out.println("请输入用户姓名: ");
		String name=show.next();
		player[i]=new Palyer(id,name);
	}
	int i=0;
	Cards是玩家类,cardSet是我定义的一个set型容器,用来存储打乱后的牌
	for(Cards card2:cardSet)
	{
		if(i==0||i==2)
		{
			player[0].cards.add(card2);
			i++;
			continue;
		}
		else if(i==1||i==3)
		{
			player[1].cards.add(card2);
			i++;
			continue;
		}
		else
		break;
	}
	for(int j=0;j<2;j++)
	{
		System.out.print("玩家"+j+"的牌为: ");
		for(Cards card3:player[j].cards)
		{
			System.out.print(card3.type+card3.ID+" ");
		}
		System.out.println();
	}
}


正在回答

2 回答

package com.PlayCard;

public class Cards {
public String type;
public String ID;
//纸牌类
public Cards(String type,String id)
{
	this.type=type;
	this.ID=id;
}
}
package com.PlayCard;
//玩家类
import java.util.ArrayList;
//import java.util.HashSet;
import java.util.List;
//import java.util.Set;

public class Palyer {
public String ID,name;
public List <Cards> cards;
public Palyer(String id,String name)
{
	this.ID=id;
	this.name=name;
	this.cards=new ArrayList<Cards>();//改后
	//this.cards=new HashSet<Cards>();//改前
}
}
package com.PlayCard;
//cardList类,之前cardSet类不知道哪的问题所以重写了一个,使用的List容器
//前面代码几乎与CardSet类相同,两个类之间区别主要就是功能的多少
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class CardList implements Comparator<Cards>{
public List <Cards> cardList=new ArrayList<Cards>();//存储所有纸牌的容器
Palyer []player=new Palyer[2];//存储两个玩家
public void testAdd(String []card){
	System.out.println("------准备生成扑克牌!-------");
	//循环创建四种花色的卡牌并添加到已有容器中
	for(String a :card)
	{
		Cards card1=new Cards("方片",a);
		cardList.add(card1);
	}
	for(String a :card)
	{
		Cards card1=new Cards("黑桃",a);
		cardList.add(card1);
	}
	for(String a :card)
	{
		Cards card1=new Cards("红桃",a);
		cardList.add(card1);
	}
	for(String a :card)
	{
		Cards card1=new Cards("梅花",a);
		cardList.add(card1);
	}
	System.out.println("------扑克牌已生成!------");
	//输出所有的卡牌
	System.out.print("{");
	for(Cards card2:cardList)
	{
		System.out.print(card2.type+card2.ID+" ");
	}
	System.out.println("}");
}
//打乱所有的卡牌
public void daluan()
{
	System.out.println("------开始洗牌!------");
	//在网上找的方法,获取容器的尺寸,然后生成随机数,使用get方法获取随机卡牌使其从第一个直到最后一个元素依次交换,借此打乱所有卡牌
	int size=cardList.size();
	//获取随机数
	Random random=new Random();
	for(int j=0;j<size;j++)
	{
		//交换
		int randomPos=random.nextInt(size);
		Cards temp=cardList.get(j);
		cardList.set(j,cardList.get(randomPos));
		cardList.set(randomPos, temp);
	}
	System.out.println("------洗牌成功!------");
	
}
public void sendCard()
{
	//实例化玩家
	System.out.println("-----准备创建用户------");
	Scanner show=new Scanner(System.in);
	for(int i=0;i<2;i++)
	{
		System.out.println("请输入玩家id: ");
		String id=show.next();
		System.out.println("请输入用户姓名: ");
		String name=show.next();
		player[i]=new Palyer(id,name);
	}
	System.out.println("------用户创建成功!------");
	System.out.println("-------开始发牌!-------");
	int i=0;
	//交错拿牌,使用i控制拿牌的玩家
	for(Cards card2:cardList)
	{
		if(i==0||i==2)
		{
			player[0].cards.add(card2);
			System.out.println("玩家"+player[0].name+"拿牌");
			i++;
			continue;
		}
		else if(i==1||i==3)
		{
			player[1].cards.add(card2);
			System.out.println("玩家"+player[1].name+"拿牌");
			i++;
			continue;
		}
		else
		break;
	}
	System.out.println("-----发牌完毕!------");
	//循环输出各玩家的手牌
	for(int j=0;j<2;j++)
	{
		System.out.print("玩家"+player[j].name+"的牌为: ");
		for(Cards card3:player[j].cards)
		{
			System.out.print(card3.type+card3.ID+" ");
		}
		System.out.println();
	}
}
public void show()
{
	/**
	 * 此处为比较大小并输出获胜玩家手中最大的牌
	 * 首先将所有玩家的手牌用一个新的list类型存储
	 * 再调用Collections.sort对其进行排序,因使用Comparator方法,所以重定义其compare借口,重定义方法会在compare处进行进行说明
	 * 使用contains方法判断哪个玩家手中包含最大的牌进而判断获胜玩家
	 */
	//首先将所有玩家的手牌用一个新的list类型存储
	List <Cards> cardPlayer=new ArrayList<Cards>();
	for(int i=0;i<2;i++)
	{
		cardPlayer.add(player[i].cards.get(0));
		cardPlayer.add(player[i].cards.get(1));
	}
	//再调用Collections.sort对其进行排序
	Collections.sort(cardPlayer, new CardList());
	//使用contains方法判断哪个玩家手中包含最大的牌进而判断获胜玩家
	if(player[0].cards.contains(cardPlayer.get(3)))
	System.out.println("玩家"+player[0].name+"获胜");
	else
	System.out.println("玩家"+player[1].name+"获胜");
	Collections.sort(player[0].cards, new CardList());
	System.out.println("用户"+player[1].name+"最大的牌为"+player[0].cards.get(1).type+player[0].cards.get(1).ID);
	Collections.sort(player[1].cards, new CardList());
	System.out.println("用户"+player[1].name+"最大的牌为"+player[1].cards.get(1).type+player[1].cards.get(1).ID);
}
@Override
//compare方法
/**
 * 使用下标方法判断
 * 首先定义定义两个字符串数组分别对应卡牌属性的type和ID,数组定义在最下方的index1和Index2函数中
 * 先判断两张卡牌各自的ID在index1中的数组下标位置,若不相等,返回其差值
 * 若相等,进而再比较各自的type在index2中的数组下标位置,若相等,返回0,不相等,则返回其差值
 */
public int compare(Cards o1, Cards o2) {
	// TODO Auto-generated method stub
	//调用index1来获取type的下标值
	int i=index1(o1.ID),j=index1(o2.ID);
	if(i==j)
	{
		//调用index2来获取type的下标值
		int a=index2(o1.type),b=index2(o2.type);
		if(a==b)
		return 0;
		else
		return (a-b);
	}
	else
	{
		return (i-j);
	}
}
//用来返回ID的下标位置
public int index1(String id)
{
	String []card=new String[]{"2","3","4","5","6","7","8","9","10","J","Q","k","A"};
	int i=0;
	for(;i<13;i++)
	{
		if(id==card[i])
		break;
	}
	return i;
}
//用来返回type的下标位置
public int index2(String type)
{
	String []color=new String[]{"方片","黑桃","红桃","梅花"};
	int i=0;
	for(;i<4;i++)
	{
		if(type==color[i])
		break;
	}
	return i;
}
}
package com.PlayCard;
//主函数
//实例化CardList类并调用其中的函数实现各种功能
public class Test {

	public static void main(String[] args) {
	String []card=new String[]{"2","3","4","5","6","7","8","9","10","J","Q","k","A"};
	CardList test1=new CardList();
	//产生卡牌并输出
	test1.testAdd(card);
	打乱卡牌
	test1.daluan();
	生成玩家并发牌
	test1.sendCard();
	//比较并输出获胜玩家并各自的最大手牌
	test1.show();
	}

}


0 回复 有任何疑惑可以回复我~
#1

泪舞天涯 提问者

毕竟是新手,也是刚上大学,才刚刚开始学着敲代码,时间还不到一年,以后会改的?,虽然看不出问题,不过还是谢谢了?
2017-07-30 回复 有任何疑惑可以回复我~

我有个问题,Cards应该是扑克牌类吧,CardsSet应该是Set类型的,不会编译报错吗。我觉得你还是把全部发上来比较好。

0 回复 有任何疑惑可以回复我~
#1

泪舞天涯 提问者

代码已经写完了,想要恢复到之前的状态很难,但这块还是搞不懂,我是把玩家里面存储扑克牌属性的容器有set型变为了list型,然后继续写完的,这样,我把定义的我所有类发上来,你有时间看下,如果没时间就算了,谢谢了。
2017-07-29 回复 有任何疑惑可以回复我~
#2

泪舞天涯 提问者

输出处有点小错误,最后把两个玩家的名字给输出重复了,而且玩家名字不知道为什么只能输英文,输中文就会卡在那,其他一切正常,无伤大雅,我就不重新再发一遍了,抱歉了
2017-07-29 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

各位能帮我看下为什么我用遍历set时会直接跳过这段代码呢?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信