java在不同类中调用一个集合, 为什么在其他类里调用这个集合,size就变成0了??

ShaneGK 2018-08-20 10:00:29
做一个简易扑克牌游戏,有两个类如下:
---------------首先一个扑克牌类--------------------------------
package cardGame;

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

public class ShuffleAllCards {
public List<String> cards;
public ShuffleAllCards(){
this.cards = new ArrayList<String>();
}
/**
* 生成所有52张牌
* */
public void CardsCreate(){
System.out.println("-----------游戏开始!-----------");
//通过遍历得到所有52张牌.
String[] number = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
String[] color = {"黑桃","红桃","梅花","方块"};
for(int i=0;i<number.length;i++){
for (int j = 0; j < color.length; j++) {
//第一个是 黑桃A, 然后 红桃A,
String OneCard = color[j]+number[i];
//每一次都加到List里,list是有序的.
cards.add(OneCard);
}
}
if(cards.size() == 52){
System.out.println("-----------生成扑克牌成功-------");
}
}
/**
* 打乱所有52张牌的顺序
* */
public void ShuffleCards(){
System.out.println("-----------开始洗牌-----------");
Collections.shuffle(cards);
System.out.println(cards.size()); //是52--------------------------------[/color]
System.out.println("-----------洗牌结束-----------");
}
}

-----------------------然后在另一个类里调用这个cards的集合,-----------------------
package cardGame;

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

public class LetUsPlay {
Scanner console = new Scanner(System.in);

//定义一个玩家List
public List<Players> players;
public LetUsPlay() {
//初始化玩家List
players = new ArrayList<Players>();
}


/**
* 创建玩家方法
* */
public void CreatePlayers(){
System.out.println("-----------登记玩家信息-----------");
System.out.println("一共有几位玩家呢?");
int playerCounter = console.nextInt();
for(int i=0;i<playerCounter;i++){
//确定一共有几个玩家
System.out.println("请输入第"+(i+1)+"位玩家ID: ");
int playerId = console.nextInt();
System.out.println("请输入第"+(i+1)+"位玩家姓名: ");
String playerName = console.next();
Players player = new Players(playerId,playerName);
players.add(player);
}
for (Players players : players) {
System.out.println(players.name);
}
}

/**
* 为玩家发牌,之前扑克牌已经打乱顺序了
* */
public void GiveCards(){
Players player = new Players();
ShuffleAllCards giveCards = new ShuffleAllCards();
System.out.println(giveCards.cards.size()); //输出是0,应该是52呀-----------------------------------[/color]
}
}


大神帮忙看下,非常感谢~~~~~
...全文
404 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
预见-遇见 2018-08-20
  • 打赏
  • 举报
回复
你在ShuffleAllCards的构造函数中调用CardsCreate跟ShuffleCards方法就行了,不然你就仅仅创建了一个对象,什么都没干啊
  • 打赏
  • 举报
回复
因为在另一个类中,你重新实例化了一个对象,他在内存中就是单独的一块内存,此时它的值就是数据的初始化默认值,因此它的值为0。
解决办法:1调用CardsCreate()方法 2.将cards设为static类型
ShaneGK 2018-08-20
  • 打赏
  • 举报
回复
引用 5 楼 ws_tan 的回复:
[quote=引用 4 楼 ws_tan 的回复:]
[quote=引用 3 楼 CarlGK 的回复:]
[quote=引用 1 楼 ws_tan 的回复:]
因为在另一个类中,你重新实例化了一个对象,他在内存中就是单独的一块内存,此时它的值就是数据的初始化默认值,因此它的值为0。
解决办法:1调用CardsCreate()方法 2.将cards设为static类型

谢谢大神~~, 方法2试了可以的, 还想请教下, 关于方法1, 应该怎么调用呀?如下会报错

[/quote]其实就用方法2就行,方法1有点问题,因为每次都是随机打乱,所以用方法1去调用的话就会生成两副牌,那么就不是原来的那个对象了[/quote]方法1:
giveCards.CardsCreate();
giveCards.ShuffleCards();
System.out.println(giveCards.cards.size());
[/quote]

明白了, 非常感谢
  • 打赏
  • 举报
回复
引用 4 楼 ws_tan 的回复:
[quote=引用 3 楼 CarlGK 的回复:]
[quote=引用 1 楼 ws_tan 的回复:]
因为在另一个类中,你重新实例化了一个对象,他在内存中就是单独的一块内存,此时它的值就是数据的初始化默认值,因此它的值为0。
解决办法:1调用CardsCreate()方法 2.将cards设为static类型

谢谢大神~~, 方法2试了可以的, 还想请教下, 关于方法1, 应该怎么调用呀?如下会报错

[/quote]其实就用方法2就行,方法1有点问题,因为每次都是随机打乱,所以用方法1去调用的话就会生成两副牌,那么就不是原来的那个对象了[/quote]方法1:
giveCards.CardsCreate();
giveCards.ShuffleCards();
System.out.println(giveCards.cards.size());
  • 打赏
  • 举报
回复
引用 3 楼 CarlGK 的回复:
[quote=引用 1 楼 ws_tan 的回复:]
因为在另一个类中,你重新实例化了一个对象,他在内存中就是单独的一块内存,此时它的值就是数据的初始化默认值,因此它的值为0。
解决办法:1调用CardsCreate()方法 2.将cards设为static类型

谢谢大神~~, 方法2试了可以的, 还想请教下, 关于方法1, 应该怎么调用呀?如下会报错

[/quote]其实就用方法2就行,方法1有点问题,因为每次都是随机打乱,所以用方法1去调用的话就会生成两副牌,那么就不是原来的那个对象了
ShaneGK 2018-08-20
  • 打赏
  • 举报
回复
引用 1 楼 ws_tan 的回复:
因为在另一个类中,你重新实例化了一个对象,他在内存中就是单独的一块内存,此时它的值就是数据的初始化默认值,因此它的值为0。
解决办法:1调用CardsCreate()方法 2.将cards设为static类型

谢谢大神~~, 方法2试了可以的, 还想请教下, 关于方法1, 应该怎么调用呀?如下会报错

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧