java .lang.ArrayIndexOutOfBoundsException with Android String-Arrays в res / values ​​/ strings. xml - PullRequest
0 голосов
/ 01 апреля 2020

Я программирую приложение для карточной игры. Приложение в основном показывает карту случайного действия с изображением, названием, действием и специальной информацией при нажатии на экран. Все это работает с массивами basi c 2d, которые затем преобразуются в 2d ArrayList, поэтому я могу временно удалять элементы и добавлять их снова, когда приложение показывает все карты. Теперь я хотел реализовать многоязыковую поддержку и следую учебному пособию Android Dev. Теперь я должен был сохранить свои строки в Android Resource XML. Вот что я сделал.

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="blackhole">
    <item>blackhole</item>
    <item>Black Hole</item>
    <item>All Black Cards in the hands of the players go to the player of the Black Card.</item>
    <item>Note: -</item>
</string-array>
...
</resources>

В моем файле MainActivity. java я теперь читаю ресурсы и сохраняю их в 2d ArrayList следующим образом.

public class MainActivity extends AppCompatActivity {

Resources res = getResources();
String [][] cards = {res.getStringArray(R.array.blackhole),...};

ArrayList<ArrayList<String>> cardslist = new ArrayList<>();

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

    resetcards();
}

public void resetcards(){
    cardslist.clear();
    for(int i=0; i < 33; i++) {
        cardslist.add(new ArrayList<String>());
    }
    for(int j=0; j<33; j++){
        for(int k=0; k<4; k++){
            cardslist.get(j).add(cards[j][k]);
        }
    }
}
}

Когда Я сейчас пытаюсь собрать приложение (также имеет другие методы, но они не важны). Я получаю эту ошибку.

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.frantic/com.example.frantic.MainActivity}: java.lang.ArrayIndexOutOfBoundsException: length=3; index=3
Caused by: java.lang.ArrayIndexOutOfBoundsException: length=3; index=3
at com.example.frantic.MainActivity.resetcards(MainActivity.java:23)
at com.example.frantic.MainActivity.onCreate(MainActivity.java:13)

Я не понимаю, почему я получаю эту ошибку, поскольку у меня явно 4 элемента в моем массив (посмотрите в первом блоке кода), и я ищу только 4, а не 5. У кого-нибудь есть решение, что не так? Спасибо

...