Я программирую приложение для карточной игры. Приложение в основном показывает карту случайного действия с изображением, названием, действием и специальной информацией при нажатии на экран. Все это работает с массивами 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. У кого-нибудь есть решение, что не так? Спасибо