2016-05-22 3 views
1

У меня есть строка массива, и я хотел бы сохранить первый элемент в строке и удалить первый элемент в массиве, вот что я до сих пор имею.Удалить первую строку из строкового массива android studio

код, который вызывает мою ошибку является:

public String giveCard(){ 
    shuffle_cards(); 
    String random = deck_list.remove(0); 
    Log.i("random", random); 
    return random; 
} 

Здесь вся страница

import android.app.Activity; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 

import java.sql.Array; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Collections; 
import java.util.List; 
import java.util.Random; 

public class MainActivity extends Activity { 

    List<String> deck_list; 
    String[] users_cards, computers_cards; 
    String[] deck = { 
      "ace-clubs", "ace-diamonds", "ace-hearts", "ace-spades", 
      "two-clubs", "two-diamonds", "two-hearts", "two-spades", 
      "three-clubs", "three-diamonds", "three-hearts", "three-spades", 
      "four-clubs", "four-diamonds", "four-hearts", "four-spades", 
      "five-clubs", "five-diamonds", "five-hearts", "five-spades", 
      "six-clubs", "six-diamonds", "six-hearts", "six-spades", 
      "seven-clubs", "seven-diamonds", "seven-hearts", "seven-spades", 
      "eight-clubs", "eight-diamonds", "eight-hearts", "eight-spades", 
      "nine-clubs", "nine-diamonds", "nine-hearts", "nine-spades", 
      "ten-clubs", "ten-diamonds", "ten-hearts", "ten-spades", 
      "jack-clubs", "jack-diamonds", "jack-hearts", "jack-spades", 
      "queen-clubs", "queen-diamonds", "queen-hearts", "queen-spades", 
      "king-clubs", "king-diamonds", "king-hearts", "king-spades", 
      "joker-one", "joker-two" 
    }; 

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

     shuffle_cards(); 
     users_cards[0] = giveCard(); 
     users_cards[1] = giveCard(); 
     users_cards[2] = giveCard(); 
     users_cards[3] = giveCard(); 
     users_cards[4] = giveCard(); 

     computers_cards[0] = giveCard(); 
     computers_cards[1] = giveCard(); 
     computers_cards[2] = giveCard(); 
     computers_cards[3] = giveCard(); 
     computers_cards[4] = giveCard(); 

    } 

    public void shuffle_cards(){ 

     deck_list = (Arrays.asList(deck)); 
     Collections.shuffle(deck_list); 
     String[] shuffle_deck = deck_list.toArray(new String[deck_list.size()]); 
     Log.d("Shuffled Deck", "arr: " + Arrays.toString(shuffle_deck)); 


    } 

    public String giveCard(){ 
     shuffle_cards(); 
     String random = deck_list.remove(0); 
     Log.i("random", random); 
     return random; 
    } 


} 
+0

Это не имеет смысла использовать массив здесь. Используйте Stack, Queue или List (где вам нужно удалить элемент самостоятельно). – Tom

ответ

0
deck_list = (Arrays.asList(deck)); 
... 
String random = deck_list.remove(0); 

Arrays.asList(deck) возвращает фиксированный размер List, так что вы не можете удалять элементы из Это. Вот почему deck_list.remove(0) выдает исключение.

Из Javadoc:

<T> List<T> java.util.Arrays.asList(T... a)

Возвращает список, состоящий из фиксированного размера подкрепленную указанного массива. (Изменения в возвращенном списке «write through» в массив.) Этот метод действует как мост между API на основе массивов и коллекций в сочетании с Collection.toArray. Возвращенный список является сериализуемым и реализует RandomAccess.

Вы можете использовать

deck_list = new ArrayList<String>(Arrays.asList(deck)); 

для того, чтобы создать List переменного размера.

Кроме того, вы должны правильно создавать экземпляры users_cards и computers_cards массивов:

String[] users_cards = new String[5]; 
String[] computers_cards = new String[5]; 
+0

Я получаю эту ошибку «Попытка записать в нулевой массив» для users_cards [0] = giveCard(); –

+0

@YudiMoszkowski Вы никогда не инициализируете 'users_cards', так что это не удивительно, что это null. – Eran

Смежные вопросы