(更新)抱歉如果這是越來越像的指南。有沒有其他網站我應該發佈這個?創建使用「for循環」按鈕的陣列,並且使用內的值來改變一個bool陣列值
我正在做一個擲骰子的遊戲,我對我的方式學習循環。我的方法是類似的頂端回答的這樣一個問題: 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{}
}
}
}
);
}
}
(我可以補充一點,我已經成功地有bottons保存使用的代碼骰子沒有for循環)
在我的代碼做一些研究後,我發現了以下有關的按鈕,用於循環:
「imgbt」的值是5在行
if(bool [imgbt] == false)
這給了我「ArrayIndexOutOfBoundsException」 - 錯誤。
所有總是的按鈕中的改變布爾的布爾值[5](其中不存在。我發現這通過增加聲明創建了陣列的nuber)
如果我宣佈
int imgbt = 0
裏面的for循環日食給我的錯誤:
Cannot refer to a non-final variable imgbt inside an inner class defined in a different method
(有人能解釋這個問題?)
所以,你知道任何解決我的問題,或者另一種方式來解決它,請不要猶豫,awnser!
感謝您的幫助!我從中學到了一點。儘管我的問題還沒有解決。 – Epcilon
這就像教程一樣,所以SO可能不是最好的地方。花更多的時間用Java書,學習如何使用調試器來查看問題出在哪裏。也許顯示你的所有代碼,所以人們不必猜測。順便說一句,爲數組寫'for'循環的規範方法是:for(int i = 0; i
我不確定我能理解你應該怎麼寫'for'循環。 – Epcilon