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]
}
}


大神帮忙看下,非常感谢~~~~~
...全文
395 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, 应该怎么调用呀?如下会报错

在充满仪式感的生活里,一款能传递心意的小工具总能带来意外惊喜。这款基于Java开发的满屏飘字弹幕工具,正是为热爱生活、乐于分享的你而来——它以简洁优雅的视觉效果,将治愈系文字化作灵动弹幕,在屏幕上缓缓流淌,既可以作为送给心仪之人的浪漫彩蛋,也能成为日常自娱自乐、舒缓心情的小确幸。 作为程序员献给crush的心意之作,工具的设计藏满了细节巧思。开发者基于Swing框架构建图形界面,实现了无边框全屏显示效果,搭配毛玻璃质感的弹幕窗口与圆润边角设计,让文字呈现既柔和又不突兀。弹幕内容精选了30条治愈系文案,从“秋天的风很温柔”到“你值得所有温柔”,涵盖生活感悟、自我关怀、浪漫告白等多个维度,每一条都能传递温暖力量;同时支持自定义修改文案库,你可以替换成专属情话、纪念文字或趣味梗,让弹幕更具个性化。 在视觉体验上,工具采用柔和色调生成算法,每一条弹幕都拥有独特的清新配色,搭配半透明渐变效果与平滑的移动动画,既不会遮挡屏幕内容,又能营造出灵动治愈的氛围。开发者还优化了弹幕的生成逻辑,支持自定义窗口大小、移动速度、生成间隔等参数,最多可同时显示60条弹幕,且不会造成电脑卡顿;按下任意按键即可快速关闭程序,操作便捷无负担。 对于Java学习者而言,这款工具更是一份优质的实战参考。源码完整展示了Swing图形界面开发、定时器调度、动画绘制、颜色算法等核心技术,注释清晰、结构简洁,哪怕是初学者也能轻松理解。开发者在AI辅助的基础上,反复调试优化细节,解决了透明度控制、弹幕碰撞、资源占用等多个问题,这份“踩坑实录”也为同类项目开发提供了宝贵经验。 无论是想给喜欢的人制造浪漫惊喜,用满屏文字传递心意;还是想在工作间隙用治愈文案舒缓压力,或是作为Java学习的实战案例参考,这款满屏飘字弹幕工具都能满足你的需求。它没有复杂的操作流程,无需额外配置环境,下载即可运行,用最纯粹的设计传递最真挚的

62,628

社区成员

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

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