Java &引用;如果;及;否则";与arraylist
我正在Android studio上开发一个游戏 游戏有12个方块和12个符号(在本例中为“0”零)。 当你按下新游戏按钮时,第一关开始。总共有12个级别。(柯里夫)。 几秒钟后,屏幕上将随机显示一个符号,然后消失。(根据每个级别,输入的数量增加1,例如,必须猜测级别1:1符号,必须猜测级别2:2符号)直到级别12 到目前为止,它的工作没有问题 现在我需要解决我的代码以接收用户的输入,检查是否与显示的正确块预览匹配。 如果是,则移动到下一级(重复清除块、显示随机符号、再次清除、等待用户输入的循环),直到第12级。 如果未显示失败消息,则再次显示新游戏按钮 我创建了这个Arraylist,但它不能正常工作,现在它的状态总是负值(即使按下了右侧的块)它显示的消息是“Fail!重试!”Java &引用;如果;及;否则";与arraylist,java,android,arrays,if-statement,arraylist,Java,Android,Arrays,If Statement,Arraylist,我正在Android studio上开发一个游戏 游戏有12个方块和12个符号(在本例中为“0”零)。 当你按下新游戏按钮时,第一关开始。总共有12个级别。(柯里夫)。 几秒钟后,屏幕上将随机显示一个符号,然后消失。(根据每个级别,输入的数量增加1,例如,必须猜测级别1:1符号,必须猜测级别2:2符号)直到级别12 到目前为止,它的工作没有问题 现在我需要解决我的代码以接收用户的输入,检查是否与显示的正确块预览匹配。 如果是,则移动到下一级(重复清除块、显示随机符号、再次清除、等待用户输入的循环
我运行了调试器并显示:List templast=new ArrayList() 有什么建议可以让它发挥作用吗?或者甚至让代码更整洁
private void buttonLogic(View v) {
List<Button> tempList = new ArrayList<> ();
for (int i = 0; i <= curLevel; i++) {
if (i!= MAXLEVELS)
tempList.add ( buttons.get ( i ) );
else
break;
}
if (tempList.contains ( v.getTag () )) {
curGuess++;
checkWin ();
} else {
lostGame ();
}
}
private void lostGame () {
Toast.makeText(this, "Fail! Try Again", Toast.LENGTH_SHORT).show();
disableButtons();
b_new.setVisibility(View.VISIBLE);
}
private void checkWin() {
if (curGuess == curLevel) {
disableButtons ();
if (curLevel == 12) {
Toast.makeText ( this, "Congratulations! You Won", Toast.LENGTH_SHORT ).show ();
b_new.setVisibility ( View.VISIBLE );
} else {
curGuess = 0;
curLevel++;
generateButtons ( curLevel );
}
}
}
private void按钮逻辑(视图五){
List templast=newarraylist();
对于(int i=0;i使用ArrayList templast=new ArrayList();
,否则您将缺少方法(尽管将变量从ArrayList
强制转换为List
不会引起任何抱怨)
if
条件可能是(i+1)
,因为i
基于0
,而curLevel
基于1
最简单的可能是init <代码> Currase= 0 ,只显示它为“代码> Curray+1 < /Cord>…否则您将必须考虑业务逻辑中的<代码> + 1 <代码> />代码> -1 < /Cord>偏移,这被认为是“无用的复杂性”。…这样游戏将从级别
0
开始,而级别1
将显示在GUI上。看起来您正在尝试在可用的按钮中查找已执行单击事件的按钮的匹配项
要做到这一点,我建议您使用viewId
查找精确匹配,您可以像下面这样更改您的方法
private void buttonLogic(View v) {
boolean hasAnyMatch = false;
// Assumption is curLevel will always be less than MAXLEVELS
for (int i = 0; i <= curLevel; i++) {
if (v.getId() == buttons.get(i).getId()) {
hasAnyMatch = true;
break;
}
}
if (hasAnyMatch) {
curGuess++;
checkWin ();
} else {
lostGame ();
}
}
private void按钮逻辑(视图五){
布尔hasAnyMatch=false;
//假设curLevel始终小于MaxLevel
对于(int i=0;我调试您的代码,在您尝试验证内容时检查tempList包含的内容,并在您在列表中输入该值时检查v.getTag()确切包含的内容很难说,特别是因为我们不知道v.getTag()
将返回或templast
实际包含的内容。如果这是您的实际代码,那么templast.contains(v.getTag())
应该可以工作,如果数据设置正确(我们不知道)。最好使用调试器逐步检查代码,特别是检查tempList
的内容以及从v.getTag()
获得的内容,然后检查这两个对象的equals()
方法正在做什么。我运行了调试器并显示:List templast=new ArrayList();templast:size 12------用于(inti=0;iif(templast.contains(v.getTag())
将此更改为if(templast.contains(v))
请不要通过评论提供更多信息。请始终编辑并更新您的问题!我的印象是,通常在创建集合对象时,您希望使用相应集合接口类型的变量引用该对象。在这种情况下,请使用列表模板=new ArrayList();将使代码更灵活,更易于修改,如果以后确定LinkedList可能比ArrayList更适合实现。
private void buttonLogic(View v) {
List<Button> tempList = new ArrayList<> ();
for (int i = 0; i <= curLevel; i++) {
if (i!= MAXLEVELS)
tempList.add ( buttons.get ( i ) );
else
break;
}
if (tempList.contains ( v.getTag () )) {
curGuess++;
checkWin ();
} else {
lostGame ();
}
}
private void lostGame () {
Toast.makeText(this, "Fail! Try Again", Toast.LENGTH_SHORT).show();
disableButtons();
b_new.setVisibility(View.VISIBLE);
}
private void checkWin() {
if (curGuess == curLevel) {
disableButtons ();
if (curLevel == 12) {
Toast.makeText ( this, "Congratulations! You Won", Toast.LENGTH_SHORT ).show ();
b_new.setVisibility ( View.VISIBLE );
} else {
curGuess = 0;
curLevel++;
generateButtons ( curLevel );
}
}
}
private void buttonLogic(View v) {
boolean hasAnyMatch = false;
// Assumption is curLevel will always be less than MAXLEVELS
for (int i = 0; i <= curLevel; i++) {
if (v.getId() == buttons.get(i).getId()) {
hasAnyMatch = true;
break;
}
}
if (hasAnyMatch) {
curGuess++;
checkWin ();
} else {
lostGame ();
}
}