在 Array 或 ArrayList 中删除和添加值(高效)- Android/Java
Removing and adding values in Array or ArrayList (efficiently) - Android/Java
我做的练习有点卡住了。
我基本上有 4 个按钮,如果选中一个复选框,则必须隐藏一个。
我不知道为什么,但我就是不知道该怎么做,我应该制作一个 arrayList 而不是一个数组,并且 remove/add 值不断地出现,还是有另一种方法来 'hide' 或不使用值?
希望我的解释清楚一点,在此先感谢! :)
这里是代码 MainActivity.java 代码(不包括导入):
public class MainActivity extends AppCompatActivity {
String globalColor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setColor();
}
private int randomColor(int length){
return (int) Math.floor(Math.random()*length);
}
private void setColor(){
String [] colors = {"Green", "Blue", "Red", "Magenta"};
//ArrayList<String> colors = new ArrayList<String>();
int rndColor = randomColor(colors.length); //color name for text
int rndColor2 = randomColor(colors.length); //color for text color
if(rndColor2 == rndColor){
rndColor2 = randomColor(colors.length);
}
globalColor = colors[rndColor];
TextView v = (TextView) findViewById(R.id.color);
v.setText(colors[rndColor]);
v.setTextColor(Color.parseColor(colors[rndColor2]));
}
public void checkColor(View v){
Button b = (Button)v;
String buttonText = b.getText().toString();
TextView txtview = (TextView) findViewById(R.id.result);
if(buttonText.equals(globalColor)){
txtview.setText("Yaay");
setColor();
} else {
txtview.setText("Booo");
setColor();
}
}
private void hideMagenta(){
CheckBox checkbox = (CheckBox)findViewById(R.id.checkbox);
checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
if(isChecked){
//this is where my problem is; I want to remove magenta as an option
//is it better to do this with an arraylist and to remove and add magenta to the arraylist
//or is there a different, more efficient way
}
}
});
}
}
你有很多选择。您可以像建议的那样使用 ArrayList,您可以将可用颜色列表传递给 setColor
方法。也许你可以传递你不想使用的颜色,然后在随机时做 if(randomedColor == colorYouDontWant) then random again
。您甚至可以使用 Map<String, Color>
并将所有颜色放在那里,然后从这张地图中删除它们,随机化会很奇怪。或者 Map<String, Boolean>
其中键是颜色,值是颜色是否可用(如果可用则为真,否则为假)。我建议使用 ArrayList。
顺便说一句。此片段:
if(rndColor2 == rndColor){
rndColor2 = randomColor(colors.length);
}
我知道您不希望颜色相同,但如果再次随机生成相同的结果怎么办?你应该这样做:
while(rndColor2 == rndColor)
我做的练习有点卡住了。 我基本上有 4 个按钮,如果选中一个复选框,则必须隐藏一个。 我不知道为什么,但我就是不知道该怎么做,我应该制作一个 arrayList 而不是一个数组,并且 remove/add 值不断地出现,还是有另一种方法来 'hide' 或不使用值?
希望我的解释清楚一点,在此先感谢! :)
这里是代码 MainActivity.java 代码(不包括导入):
public class MainActivity extends AppCompatActivity {
String globalColor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setColor();
}
private int randomColor(int length){
return (int) Math.floor(Math.random()*length);
}
private void setColor(){
String [] colors = {"Green", "Blue", "Red", "Magenta"};
//ArrayList<String> colors = new ArrayList<String>();
int rndColor = randomColor(colors.length); //color name for text
int rndColor2 = randomColor(colors.length); //color for text color
if(rndColor2 == rndColor){
rndColor2 = randomColor(colors.length);
}
globalColor = colors[rndColor];
TextView v = (TextView) findViewById(R.id.color);
v.setText(colors[rndColor]);
v.setTextColor(Color.parseColor(colors[rndColor2]));
}
public void checkColor(View v){
Button b = (Button)v;
String buttonText = b.getText().toString();
TextView txtview = (TextView) findViewById(R.id.result);
if(buttonText.equals(globalColor)){
txtview.setText("Yaay");
setColor();
} else {
txtview.setText("Booo");
setColor();
}
}
private void hideMagenta(){
CheckBox checkbox = (CheckBox)findViewById(R.id.checkbox);
checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
if(isChecked){
//this is where my problem is; I want to remove magenta as an option
//is it better to do this with an arraylist and to remove and add magenta to the arraylist
//or is there a different, more efficient way
}
}
});
}
}
你有很多选择。您可以像建议的那样使用 ArrayList,您可以将可用颜色列表传递给 setColor
方法。也许你可以传递你不想使用的颜色,然后在随机时做 if(randomedColor == colorYouDontWant) then random again
。您甚至可以使用 Map<String, Color>
并将所有颜色放在那里,然后从这张地图中删除它们,随机化会很奇怪。或者 Map<String, Boolean>
其中键是颜色,值是颜色是否可用(如果可用则为真,否则为假)。我建议使用 ArrayList。
顺便说一句。此片段:
if(rndColor2 == rndColor){
rndColor2 = randomColor(colors.length);
}
我知道您不希望颜色相同,但如果再次随机生成相同的结果怎么办?你应该这样做:
while(rndColor2 == rndColor)