删除和缩小ArrayList

时间:2017-10-11 23:04:29

标签: java android list arraylist

我是Android新手,今天我觉得很有动力,所以我开始编写应用程序。

但现在我被卡住了......我有一个带有字符串的ArrayList。使用随机数生成器,我从此列表中获取一个String。 我真正想做的是避免重复弦乐。我想只看一次元素。

你能帮帮我吗?

这是我的MainActivity:

public class MainActivity extends AppCompatActivity {

private TextView welcomeText;
private TextView pokemons;
private TextView whatToDo;
private Button yesButton;
private Button noButton;

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

    final String[] pokemonok = {
            "Pikachu",
            "Charizard",
            "Bulbasaur",
            "Charmander",
            "Squirtle",
            "Caterpie",
            "Metapod",
            "Weedle",
            "Rattata",
            "Onix"
    };

    final List<String> list = new ArrayList<String>(pokemonok.length);
    for (String s : pokemonok) {
        list.add(s);
    }

    welcomeText = (TextView) findViewById(R.id.welcomeText);
    pokemons = (TextView) findViewById(R.id.pokemons);
    whatToDo = (TextView) findViewById(R.id.whatToDo);
    //EditText answerText = (EditText) findViewById(R.id.answerText);
    yesButton = (Button) findViewById(R.id.yesButton);
    noButton = (Button) findViewById(R.id.noButton);

    final String[] def = {"[ " + list.get(0) + " ]"};
    pokemons.setText(def[0]);

    View.OnClickListener igen = new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Random r = new Random();
            int szam = r.nextInt(pokemonok.length);

            pokemons.setText(def[0] + "[ " + list.get(szam) + " ]");
            def[0] = def[0] + "[ " + list.get(szam) + " ]";

        }
    };

    yesButton.setOnClickListener(igen);

   }
}

4 个答案:

答案 0 :(得分:2)

如果要在访问后从列表中删除元素,可以调用

list.remove(i)

这将从列表中删除第i个元素。

答案 1 :(得分:1)

根据您设置随机数生成器的方式,您可以执行以下操作:

list.remove(randomNumber);

这应该从列表中删除该项目。

答案 2 :(得分:1)

如果要保留列表,可以使用另一个列表,每当从原始列表中读取对象时,将该元素添加到临时列表中。然后,每当您想要选择一个新的随机元素时,首先您必须检查该元素是否已经在临时列表中。如果是,则必须重新生成该过程。

List<String> tempList = new ArrayList<>();
tempList.add( // YOUR ELEMENT TO SAVE ON TEMP LIST // );

然后检查

if (tempList.contains(element)){
      // your code to doing the process again
{

答案 3 :(得分:0)

如果您不想更改您的宠物小精灵字符串列表,那么您可以在班级中创建一个布尔数组,用于识别已经选择了哪个神奇宝贝:

private boolean[] pokemonPicked = new boolean[pokemonok.length];

您可以将clickListener方法更改为:

View.OnClickListener igen = new View.OnClickListener() {
    @Override
    public void onClick(View view) {

        int r = new Random().nextInt(pokemonok.length);
        while(pokemonPicked[r]){
            r = new Random().nextInt(pokemonok.length);
        }
        pokemonPicked[r] = true;
        int szam = r;

        pokemons.setText(def[0] + "[ " + list.get(szam) + " ]");
        def[0] = def[0] + "[ " + list.get(szam) + " ]";

    }
};