- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先,感谢您抽出宝贵的时间阅读本文。我是 android 开发的新手,感谢我能得到的所有帮助。我会保持简短的描述。
我正在开发一个应用程序作为一个副项目,通过自动化主动掷骰(掷 20 面骰子,添加个人修饰符并从大到小排序)来加快我和我 friend 的 d&d session 。一切都很顺利,直到我遇到一个错误,令我沮丧的是我无法修复。带名称的已排序 Arraylist 的长度和免费字典的长度似乎始终为零,我无法找出原因。代码贴在下面。
第一步是从输入中收集用户数据。输入是这样的(这解释了奇怪的 ID)
//updates player database with user input
private void updateDictionaryManager(int _partySize) {
listManager.empty();
if (_partySize > 0) {
for (int i = 0; i < _partySize + 1; i++) {
EditText Name = (EditText)findViewById(i);
EditText dexMod = (EditText)findViewById(i + 10);
String playerName = "player " + String.valueOf(i);
int playerDexMod = 0;
if (Name.getText() != null) {
playerName = Name.getText().toString();
}
if (dexMod.getText() != null) {
try {
playerDexMod = Integer.parseInt(dexMod.getText().toString());
} catch (Exception e) {
playerDexMod = 0;
}
}
listManager.append(playerName, playerDexMod, i);
}
}
}
这是列表管理器类的代码
public void append(String _name, int _dexMod, int _playerNumber) {
if (!_name.equals("")) {
playerNames.add(_name);
} else {
String defaultName = "player " + String.valueOf(_playerNumber);
playerNames.add(defaultName);
}
dexMod.add(_dexMod);
}
public void empty() {
playerNames.clear();
dexMod.clear();
}
我想问题就藏在这里(但我发送了前面的以防万一我错过了那里的东西)
final class InitiativeRoller extends ListManager{
Map<Integer, List<String>> playerRolls = new HashMap<>();
Map<String, Integer> outputDictionary = new HashMap<>();
List<Integer> alreadyRolled = new ArrayList<>();
List<String> outputOrder = new ArrayList<>();
public void roll() {
//retrieve lists from manager
List<String> _names = getPlayerNames();
List<Integer> _dexMod = getDexMod();
//rolling the dice and saving values
for (int i = 0; i < getSize(); i++) {
int _roll = (int) Math.round(Math.random() * 19) + 1 + _dexMod.get(i);
if (alreadyRolled.contains(_roll)) {
//add name to list in dictionary with corresponding roll
playerRolls.get(_roll).add(_names.get(i));
} else {
//generate new list for players with this roll and add to playerRolls
List<String> _list = new ArrayList<>();
_list.add(_names.get(i));
playerRolls.put(_roll, _list);
alreadyRolled.add(_roll);
}
}
//sorting the rolls from largest to smallest
Collections.sort(alreadyRolled);
Collections.reverse(alreadyRolled);
//generating output dictionary
for (int i = 0; i < alreadyRolled.size(); i++) {
int _roll = alreadyRolled.get(i);
List<String> list = playerRolls.get(_roll);
//shuffling order of players with the same roll
Collections.shuffle(list);
//add to output dictionary and list
for (int x = 0; x < list.size(); x++) {
outputDictionary.put(list.get(x), _roll);
outputOrder.add(list.get(x));
}
}
}
public Map<String, Integer> getOutputDictionary() {
return outputDictionary;
}
public List<String> getOutputOrder() {
return outputOrder;
}
每次检查时,生成的 outputDictionary 和 outputorder 的长度都为零。我错过了什么?抱歉发了这么长的帖子。
编辑:我检查了代码,在 InitiativeRollerClass 中调用 getPlayerNames 和 getDexMod 之前,列表的长度似乎没有问题。
编辑:这是获取方法
public List<String> getPlayerNames() {
return playerNames;
}
public List<Integer> getDexMod() {
return dexMod;
}
更新:这是绑定(bind)到滚动按钮的代码:
rollInitiative.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//update dictionary
int roundedProgress = Math.round(playerSlider.getProgress());
try {
updateDictionaryManager(roundedProgress);
} catch (Exception e) {
updateDictionaryManagerOnException(roundedProgress, playerList);
}
initiativeRoller.roll();
displayResult(initiativeRoller.getOutputOrder(), initiativeRoller.getOutputDictionary(), InitiativeList);
}
});
这里介绍方法,仅供调试
//displays output to user
private void displayResult(List<String> _outputOrder, Map<String, Integer> _outputDictionary, TextView _initiativelist) {
_initiativelist.setText(listManager.getDexMod() + "\n" + listManager.getPlayerNames()
+ "\n" + initiativeRoller.getOutputOrder());
}
这给我带来了以下内容
我还在线检查了 roll 类的代码本身是否正常运行,确实如此。这是多次运行后四个硬编码名称和值的结果:
[亚伦、乔希、克莱德、李]
{Aaron=24,Clide=20,Josh=22,Li=8}
sh-4.3$ java -Xmx128M -Xms16M HelloWorld
[乔希、李、亚伦、克莱德]
{Aaron=6,Clide=6,Josh=20,Li=12}
sh-4.3$ java -Xmx128M -Xms16M HelloWorld
[Aaron, Clide, Li, Josh]
{Aaron=20,Clide=17,Josh=10,Li=11}
sh-4.3$ java -Xmx128M -Xms16M HelloWorld
[李、亚伦、克莱德、乔希]
{Aaron=19,Clide=18,Josh=18,Li=21}
似乎一切正常,我只是不明白为什么返回的列表长度为零。
附注getSize() 方法的代码
public int getSize() {
return playerNames.size();
}
最佳答案
好的,这可能是错误的:请记住,在 Java 中,每个变量就像任何其他编译语言一样都有一个范围。现在你在 for 中声明了 playerName 和 playerDexMod,然后将它们附加到 for 中,直到现在一切都在检查中。但是,当您退出 for 时,这些变量就死了,我的意思是 java 垃圾收集器,因为它们超出了范围,应该释放它们。现在 listManager(我想它是一个 ArrayList)发现自己有不再存在的对象,所以基本上是空的。那只是一个空数组列表。如果您使用的 listManager 在类中被清除,请尝试清除类中的其他变量,这样它们就不会超出范围。告诉我这是否有帮助。
关于java - 为什么 for 循环生成的数组列表的长度始终为零(Java)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43168712/
我正在尝试创建一个包含 int[][] 项的数组 即 int version0Indexes[][4] = { {1,2,3,4}, {5,6,7,8} }; int version1Indexes[
我有一个整数数组: private int array[]; 如果我还有一个名为 add 的方法,那么以下有什么区别: public void add(int value) { array[va
当您尝试在 JavaScript 中将一个数组添加到另一个数组时,它会将其转换为一个字符串。通常,当以另一种语言执行此操作时,列表会合并。 JavaScript [1, 2] + [3, 4] = "
根据我正在阅读的教程,如果您想创建一个包含 5 列和 3 行的表格来表示这样的数据... 45 4 34 99 56 3 23 99 43 2 1 1 0 43 67 ...它说你可以使用下
我通常使用 python 编写脚本/程序,但最近开始使用 JavaScript 进行编程,并且在使用数组时遇到了一些问题。 在 python 中,当我创建一个数组并使用 for x in y 时,我得
我有一个这样的数组: temp = [ 'data1', ['data1_a','data1_b'], ['data2_a','data2_b','data2_c'] ]; // 我想使用 toStr
rent_property (table name) id fullName propertyName 1 A House Name1 2 B
这个问题在这里已经有了答案: 关闭13年前。 Possible Duplicate: In C arrays why is this true? a[5] == 5[a] array[index] 和
使用 Excel 2013。经过多年的寻找和适应,我的第一篇文章。 我正在尝试将当前 App 用户(即“John Smith”)与他的电子邮件地址“jsmith@work.com”进行匹配。 使用两个
当仅在一个边距上操作时,apply 似乎不会重新组装 3D 数组。考虑: arr 1),但对我来说仍然很奇怪,如果一个函数返回一个具有尺寸的对象,那么它们基本上会被忽略。 最佳答案 这是一个不太理
我有一个包含 GPS 坐标的 MySQL 数据库。这是我检索坐标的部分 PHP 代码; $sql = "SELECT lat, lon FROM gps_data"; $stmt=$db->query
我需要找到一种方法来执行这个操作,我有一个形状数组 [批量大小, 150, 1] 代表 batch_size 整数序列,每个序列有 150 个元素长,但在每个序列中都有很多添加的零,以使所有序列具有相
我必须通过 url 中的 json 获取文本。 层次结构如下: 对象>数组>对象>数组>对象。 我想用这段代码获取文本。但是我收到错误 :org.json.JSONException: No valu
enter code here- (void)viewDidLoad { NSMutableArray *imageViewArray= [[NSMutableArray alloc] init];
知道如何对二维字符串数组执行修剪操作,例如使用 Java 流 API 进行 3x3 并将其收集回相同维度的 3x3 数组? 重点是避免使用显式的 for 循环。 当前的解决方案只是简单地执行一个 fo
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我有来自 ASP.NET Web 服务的以下 XML 输出: 1710 1711 1712 1713
如果我有一个对象todo作为您状态的一部分,并且该对象包含数组列表,则列表内部有对象,在这些对象内部还有另一个数组listItems。如何更新数组 listItems 中 id 为“poi098”的对
我想将最大长度为 8 的 bool 数组打包成一个字节,通过网络发送它,然后将其解压回 bool 数组。已经在这里尝试了一些解决方案,但没有用。我正在使用单声道。 我制作了 BitArray,然后尝试
我们的数据库中有这个字段指示一周中的每一天的真/假标志,如下所示:'1111110' 我需要将此值转换为 boolean 数组。 为此,我编写了以下代码: char[] freqs = weekday
我是一名优秀的程序员,十分优秀!