2017-01-24 2 views
1

Я пытаюсь написать старую служанку. После раздачи карт и сортировки у меня две части карты, одна из них - playerDeck, одна - computerDeck. теперь пары нужно удалить. Но я застрял на этом этапе.может кто-нибудь помочь мне исправить этот код (строка) -java

, например (просто пример) playerDeck: 'A ♡', 'A ♢', '8 ♡', '8 ♢', '8 ♠', 'Q ♠', '2 ♠', '4 ♣', '7 ♢', '7 ♣', 'K ♣', 'A ♡', 'J ♡', '9 ♣', '3 ♢'

computerDeck: '3 ♡' , '3 ♣', '10 ♡ ',' 10 ♠ ',' 10 ♣ ',' 6 ♡ ',' K ♡ ',' K ♢ ',' A ♣ ',' A ♠ ',' 4 ♢ ' , «7 ♡», «7 ♠»

String q; 
    String p; 
    ArrayStringsTools AA=new ArrayStringsTools();//this is a class that i will use for removing item 
    for(int i=0;i<playerDeck.length-1;i++){ 
     q=playerDeck[i]; 
     q=q.substring(0,1);//i try to find the first character 


     p=playerDeck[i+1];//after finding first character, i can compare them,and if they are same, then i can remove them 
     p=p.substring(0,1); 


     if(q==p){ 
      AA.removeItemByIndex(playerDeck,26,i);//this is the method that i used for removing same item,i will put this code below 
      AA.removeItemByIndex(playerDeck,26,i+1);//there are 51 cards in total,player has 26, computer has 25 
     } 

    } 

public static int removeItemByIndex(String[] arrayOfStrings, int currentSize, int itemToRemove){//this is the method i used for removing item(first is the array of Deck, second is the size of Deck,third is the index of item to remove) 

    if(arrayOfStrings == null || currentSize > arrayOfStrings.length) { 
     System.out.println("ArrayStringsTools.removeItemByIndex: wrong call"); 
     return currentSize; 
    } 
    if(itemToRemove < 0 || itemToRemove >= currentSize) { 
     System.out.println("ArrayStringsTools.removeItem: item " 
      + itemToRemove + " out of bounds. Array Unchanged."); 
     return currentSize; 
    } 

    int i; 
    for(i = itemToRemove; i < currentSize-1; i++){ 
     arrayOfStrings[i] = arrayOfStrings[i+1]; 
    } 
    arrayOfStrings[i]= null; 
    return currentSize-1; 

я думаю, что я написал правильно, но не показывает никакой разницы по сравнению с началом. Результат должен быть: playerDeck: '8 ♠', 'Q ♠', '2 ♠', '4 ♣', 'K ♣', 'A ♡', 'J ♡', '9 ♣', ' 3 ♢ ' computerDeck: '10 ♣', '6 ♡', '4 ♢'

или есть другой способ сделать это, потому что, когда пара удалена, есть два пустых пространства, поэтому ... I «ве боролся в течение длительного времени ......

+0

Какой результат вы ожидаете и какой результат вы получаете? –

+0

playerDeck: '8 ♠', 'Q ♠', '2 ♠', '4 ♣', 'K ♣', 'A ♡', 'J ♡', '9 ♣', '3 ♢' computerDeck: '10 ♣ ',' 6 ♡ ',' 4 ♢ ' –

+0

Разбивайте свои длинные строки на более короткие. Это боль, чтобы читать очень длинные строки кода, потому что если вы прокрутите, чтобы увидеть конец строки, вы потеряете из виду остальную часть программы. Общий лимин - «строка длиннее 80 символов» – tucuxi

ответ

0

для сравнения 1-го символа, измените эту строку

if (q == p) { 

в

if (q.charAt(0) == p.charAt(0)) { 

Обратите внимание, что q == p проверяет, если q и p относятся к же строке и не смотрят на содержание вообще. Если вы хотите сравнить полные строки (или любой другой объект, который не является символом, int или так далее) по содержанию, вы должны использовать equals: q.equals(p) возвращает true, только если оба имеют одинаковый контент.

+0

теперь он говорит: «Исключение в потоке» main «java.lang.NullPointerException» в test.main (test.java.52) 52-я строка - «p = p.substring (0,1);» что не так –

+0

'p' является' null' в этой точке. Ссылка «null» не указывает на фактический объект; и это ошибка, чтобы попытаться вызвать 'substring (0,1)' на нулевой ссылке (так как нет реального объекта для приема вызова). Что касается * почему * 'p' имеет значение null, вы, вероятно, забыли инициализировать его значение. При объявлении, скажем, массива 'String' как' String a [] = new String [10] ', все 10 строк' String' в массиве начинаются с указания на «null». – tucuxi

0

Если вы хотите сравнить две строки, вы можете использовать„равно“, как

if(q.equals(p)){//q==p if true,they are save in the same location-this may not be what you want,and in this code it will be false forever. 

} 
+0

Я просто хочу сравнить первый символ –

+0

Строка не примитивна, а не как char, вы можете использовать equals только для проверки строк для равенства. –

+2

@Joe конвертировать с toCharArray, а затем сравнить первые элементы каждого нового массива –

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