gpt4 book ai didi

java - 使用 "for loop"创建按钮数组并使用其中的值更改 boolean 数组值

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:55:26 25 4
gpt4 key购买 nike

(已更新) 如果这越来越像指南,我深表歉意。我应该将此发布到其他网站吗?

我正在制作一个 yatzy 游戏,并且正在学习 for 循环。我的方法类似于这个问题中的最佳答案: dynamic button onclick event inside for loop这是我的代码:(是的,我正在混合语言,对不起)

package se.balderskolan.yatzy;

import java.util.Random;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;

public class MainActivity extends Activity {

Button btKasta;
Random r = new Random();
int[] tarningar = new int[5];
int[] bilder = new int [6];
ImageButton [] img= new ImageButton[5];
boolean [] bool = new boolean[5];

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

btKasta = (Button)findViewById(R.id.btKasta);

bilder [0]=R.drawable.b1; //Pictures of the dices
bilder [1]=R.drawable.b2;
bilder [2]=R.drawable.b3;
bilder [3]=R.drawable.b4;
bilder [4]=R.drawable.b5;
bilder [5]=R.drawable.b6;

img [0] = (ImageButton)findViewById(R.id.imgbt1); //The grafical dices
img [1] = (ImageButton)findViewById(R.id.imgbt2);
img [2] = (ImageButton)findViewById(R.id.imgbt3);
img [3] = (ImageButton)findViewById(R.id.imgbt4);
img [4] = (ImageButton)findViewById(R.id.imgbt5);


//The die-buttons (save or not)
img [0].setOnClickListener(
new View.OnClickListener() {

@Override
public void onClick(View v) {
if(bool [0] == false) {
bool [0] = true;
}

else{
bool [0] = false;
}
}
}
);

img [1].setOnClickListener(
new View.OnClickListener() {

@Override
public void onClick(View v) {
if(bool [1] == false) {
bool [1] = true;
}

else{
bool [1] = false;
}
}
}
);

img [2].setOnClickListener(
new View.OnClickListener() {

@Override
public void onClick(View v) {
if(bool [2] == false) {
bool [2] = true;
}

else{
bool [2] = false;
}
}
}
);

img [3].setOnClickListener(
new View.OnClickListener() {

@Override
public void onClick(View v) {
if(bool [3] == false) {
bool [3] = true;
}

else{
bool [3] = false;
}
}
}
);

img [4].setOnClickListener(
new View.OnClickListener() {

@Override
public void onClick(View v) {
if(bool [4] == false) {
bool [4] = true;
}

else{
bool [4] = false;
}
}
}
);

/*I want to replace the code above with something like this below

for(imgbt=0; imgbt<5; imgbt++){
img [imgbt].setOnClickListener(
new View.OnClickListener() {

@Override
public void onClick(View v) {

if(bool [imgbt] == false) {
bool [imgbt] = true;
}
else{
bool [imgbt] = false;
}

}
}
);

}
*/

//The die-throwing button
btKasta.setOnClickListener(
new View.OnClickListener() {

@Override
public void onClick(View v) {

for(int i=0; i<5; i++){
tarningar [i]=r.nextInt(6);

if (bool[i]==false){
img [i].setImageResource(bilder [tarningar[i]]);}
else{}
}
}
}
);
}

}

(我可以补充一点,我已经使用没有 for 循环的代码成功地让按钮保存了骰子。)

在对我的代码进行一些研究之后,我发现了以下关于循环按钮的内容:

  • "imgbt"的值为 5 at row

    if(bool [imgbt] == false)

    这给了我“ArrayIndexOutOfBoundsException”错误。

  • 所有按钮总是更改 bool [5] 的 bool 值(这不存在。我通过增加声明中创建的数组的 numer 发现了这一点)

如果我声明

    int imgbt = 0

在 for-loop eclipse 中给我错误:

    Cannot refer to a non-final variable imgbt inside an inner class defined in a different method

(有人可以解释这个错误吗?)

所以你知道我的问题的任何解决方案,或者其他解决方法,请不要犹豫,awnser!

最佳答案

这与 Android 并没有太大关系,它是基本的 Java。简而言之:

  • 数组从索引 0 开始
  • 对象数组(例如Boolean)默认用null初始化
  • 你需要使两个数组大小相同

所以,

  • 从 0 开始你的循环
  • 使用 booolean[] 代替 Boolean[] 或在使用前用 Boolean.FALSE 初始化`
  • 使两个数组的大小都为 6

关于java - 使用 "for loop"创建按钮数组并使用其中的值更改 boolean 数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12929954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com