想請教排序問題,按集合中的類的內(nèi)部類的元素的大小怎么排序
好多講的都沒用上,感覺要重新看一邊java入門
package com.lv;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.Collections;
public class CardGame {
?Map<Integer,Cards> puKe;
?List<People> gamer;
??? int[] order=new int[53];
?public CardGame() {
??puKe=new HashMap<Integer,Cards>();
??gamer=new ArrayList<People>();
??
?}
?
?public void cardBuild() {
??String type1="梅花";
??String type2="方塊";
??String type3="紅心";
??String type4="黑桃";
??String Num="A 2 3 4 5 6 7 8 9 10 J Q k";
????String[] NUM=Num.split(" ");
????System.out.println(Num.toString());
????int h=0;
??for(int i=0;i<13;i++) {
???Cards c=new Cards();
???c.num=NUM[i];
???c.type=type1;
???puKe.put(h,c);
???Cards a=new Cards();
???a.num=NUM[i];
???h++;
???a.type=type2;
???puKe.put(h,a);
???Cards b=new Cards();
???b.num=NUM[i];
???h++;
???b.type=type3;
???puKe.put(h,b);
???Cards d=new Cards();
???d.num=NUM[i];
???h++;
???d.type=type4;
???puKe.put(h,d);
???h++;
??}
??/*
?? * for(int i=0;i<13;i++) { Cards c=new Cards(); c.type=type2; c.num=NUM[i];
?? *
?? * puKe.put(i+13,c); }
?? *
?? * for(int i=0;i<13;i++) { Cards c=new Cards(); c.type=type3; c.num=NUM[i];
?? *
?? * puKe.put(i+26,c); } for(int i=0;i<13;i++) { Cards c=new Cards();
?? * c.type=type4; c.num=NUM[i];
?? *
?? * puKe.put(i+39 ,c); }
?? */
???
??
??
?}
?
?public void cardShow() {
??
???//通過keyset方法,返回Map中的所有建的值
???Set<Integer>KeySet=puKe.keySet();
???System.out.println("共有:"+KeySet.size()+"張牌;");
???//遍歷取得每一個建
???for(Integer s:KeySet) {
????Cards uu=puKe.get(s);
????System.out.println(uu.type+"\t? "+uu.num);
????
???}
???
??}
?
?public void cardPeopleShow() {
??
??//通過keyset方法,返回Map中的所有建的值
??//Set<String>KeySet=gamer.keySet();
??System.out.println("創(chuàng)建"+gamer.size()+"個人物;");
??//遍歷取得每一個建
??for(People s:gamer) {
???
???System.out.println(s.ID+"\t? "+s.name);
???
??}
??
?}
?
?
?public void cardSetPeople() {
??Scanner input=new Scanner(System.in);
??
??
??
??for(int i=1;i<3;i++) {
???People player=new People();
??System.out.println("請輸入玩家"+i+"的ID:");
??
??boolean r=true;
??while(r){
???r=false;
???String id =input.next();
???for(People p:gamer) {
????if(p.ID.equals(id))
????{
?????System.out.println("該ID已被使用,請重新輸入:");
?????r=true;
?????break;
?????
????}
???}
??? if(r==false) {
???? player.ID =id;
???}
??
????? }
??
??System.out.println("請輸入玩家"+i+"的姓名:");
??boolean e=true;
??while(e){
???e=false;
???String name =input.next();
???for(People p:gamer) {
????if(p.name.equals(name))
????{
?????System.out.println("該姓名已被使用,請重新輸入:");
?????e=true;
?????break;
????}
???}
??? if(e==false) {
???? player.name =name;
???}
??
????? }
??gamer.add(player);
??}
??
??
?}
?
?
?
?public Integer[] createSolution2(int len)
?{??Integer solutionArr[] = new Integer[len];??
?List list=new ArrayList<Integer>();??
?for (int i = 0; i < len; i++)???
??list.add(i+1);??
?Collections.shuffle(list);??
?list.toArray(solutionArr);??
?return solutionArr;
?}
?
?public void cardGet(int i) {
??Integer[] num=createSolution2 (53);
??int max1,max2;
??gamer.get(0).card .add(puKe.get(num[4*i]));
??gamer.get(1).card .add(puKe.get(num[4*i+1]));
??gamer.get(0).card .add(puKe.get(num[4*i+2]));
??gamer.get(1).card .add(puKe.get(num[4*i+3]));
??for(int j=0;j<2;j++)
??{
???
??System.out.print(gamer.get(j).name +"拿牌\t"+gamer.get(j).card .get(0).type+gamer.get(j).card .get(0).num );
??System.out.println("\t"+gamer.get(j).card .get(1).type+gamer.get(j).card .get(1).num );?
??
??}
??if(num[4*i]<num[4*i+2]) {
???System.out.println(gamer.get(0).name +"的最大牌為:"+puKe.get(num[4*i+2]).type +puKe.get(num[4*i+2]).num);
??max1=num[4*i+2];
??}
??else{
???System.out.println(gamer.get(0).name +"的最大牌為:"+puKe.get(num[4*i]).type +puKe.get(num[4*i]).num);
???max1=num[4*i];
??}
??if(num[4*i+1]<num[4*i+3]) {
???System.out.println(gamer.get(0).name +"的最大牌為:"+puKe.get(num[4*i+3]).type +puKe.get(num[4*i+3]).num);
???max2=num[4*i+3];
??}
??else{
???System.out.println(gamer.get(0).name +"的最大牌為:"+puKe.get(num[4*i+1]).type +puKe.get(num[4*i+1]).num);
???max2=num[4*i+1];
??}
??
??if(max1<max2) {
???System.out.println(gamer.get(0).name +"獲勝");
??}
??else {
???System.out.println(gamer.get(1).name +"獲勝");
??}
?}
?/*
? * public void cardComparater() {
? *
? *
? * Collections.sort(car,new CardsComparator()); for(Cards c:car) {
? * System.out.println(c.type +c.num +"\t"); } }
? */
?
?public static void main(String[] args) {
??// TODO Auto-generated method stub
???????? CardGame cg=new CardGame();
???????? cg.cardBuild();
???????? cg.cardShow();
???????? cg.cardSetPeople();
???????? cg.cardPeopleShow();
???????? cg.cardGet(1);
???????? //cg.cardComparater();
????????
?}
}
2019-10-17
你寫的好復(fù)雜啊
撲克牌的花色和數(shù)字不要用變量存 應(yīng)該存在字符串?dāng)?shù)組里面?
存的時候可以按花色和數(shù)字由小到大的順序存? 這樣洗牌的時候可以用random隨機(jī)產(chǎn)生一個下標(biāo) 取出這個下標(biāo)對應(yīng)的花色(數(shù)字同理);比較撲克牌的大小的時候可以用indexOf方法取到花色或數(shù)字對應(yīng)的下標(biāo) 因為花色和數(shù)字在數(shù)組里面是按順序存的? 這樣比較下標(biāo)就可以了
秀一下代碼
----------------------------------洗牌---------------------------------------
final String[] Types= {"黑桃","紅桃","梅花","方片"};
final String[] Numbers= {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
public void shuffle() {
System.out.println("-------------------開始洗牌。。。------------------");
Random random=new Random();
int cardIndex;
for(int i=0;i<cards.length;i++) {
do{
cardIndex=random.nextInt(cards.length);
}while(shuffleCards.contains(cards[cardIndex]));
shuffleCards.add(cards[cardIndex]);
}
System.out.println("-------------------洗牌結(jié)束!-------------------");
System.out.print("為:[");
for(Cards c:shuffleCards) {
System.out.print(c.cardType+c.cardNumber+", ");
}
System.out.print("]");
System.out.println();
}
-----------------------------------撲克牌比較---------------------------------------------
public Cards compareTwoCards(Cards c1,Cards c2) {
final String[] Types= {"黑桃","紅桃","梅花","方片"};
final String[] Numbers= {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
List<String> arrayTypes=Arrays.asList(Types);
List<String> arrayNumbers=Arrays.asList(Numbers);
if(arrayNumbers.indexOf(c1.getCardNumber()) < arrayNumbers.indexOf(c2.getCardNumber())) {
return c2;
}else if(arrayNumbers.indexOf(c1.getCardNumber()) > arrayNumbers.indexOf(c2.getCardNumber())) {
return c1;
}else {
if(arrayTypes.indexOf(c1.getCardType()) < arrayTypes.indexOf(c2.getCardType()))
return c2;
else
return c1;
}
}