problem z lista

0

Witam, mialam do napisania program, ktory ma jakby z talii kart losowac Randomem kilka, nastepnie wyswietlic ilosc wylosowanych kart i tu pojawil sie problem bo mam do tego kod:

public void IloscKart(){
    	System.out.println(size()-1);
    	}

Dalam "size()-1" bo w przeciwnym wypadku zawsze pokazywalo o jedna karte za duzo i teraz zazwyczaj jest ok;p ale czasem jak wylosuje 0 kart to wyswietla ok ze jest 0 kart a czasami ze jest ich -1 i nie wiem czemu;/.
Dalej mam wiekszy problem;p bo mam teraz napisac metoda ktora usunie mi karty powtarzajace sie( tzn 1 z nich,np mam As-pik, 1-kier, As-pik to zostaje wyswietlone tylko As-pik, 1-kier)
i mam do tego kod:

  public void usunPowtarzajace(){

        for(int i=0;i<size();i++){
           for(int b=i+1;b<size();b++){
              if(get(i).getWartosc()==get(b).getWartosc() && get(i).getKolor()==get(b).getKolor()); 
                 delete (i);
                 b--;
              }
        }
     } 

wszystko mam wczesniej zdefiniowane (_.getWartosc itd) ale odpalenie tego daje zupelnie nieoczekiwane skutki, usuwa jak sobie chce;p moglby ktos pomoc...?

0

usuwa jak sobie chce być może dlatego że tutaj operujesz na jakiejś kolekcji
domyslam się po tym -> delete(object)
chodzi o to że pętlą drugą modyfikujesz liste, na ktorej bazuje tez petla pierwsza.

proponowałbym zrobić to od tyłu ;P
czyli i=size()-1; i>=0;i--
i analogicznie do drugiego fora

0

to tego drugiego problemu użyłbym Set, ponieważ set przetrzymuje tylko elementy niepowtarzające się, czyli od razu przy losowaniu odpadają ci powtarzające się elementy</url></url>

0

hmmm;/

public void usunPowtarzajace(){

        for(int i=size()-1;i>=0;i--){
           for(int b=size()-1;b>=0;b--){
              if(get(i).getWartosc()==get(b).getWartosc() && get(i).getKolor()==get(b).getKolor()); 
                 delete (i);
                 b++;
              }
        }
     } 

co jest nie tak teraz w tej metodzie usun powtarzajace....?

0

Choćby to że porównujesz ze sobą także elementy o tym samym indeksie.
A wiadomo że tab[X] == tab[X] więc wyzerujesz tablicę.
Swoją drogą pisałem kawałek kodu dla gry w karty, moze ci sie przyda:

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;

class Card {

  private Integer value;
  private String name;
  private String color;

  public Card(Integer v, String n, String c) {
    value = v;
    name = n;
    color = c;
  }

  public Card(Card pattern){
    value=pattern.getValue();
    name=pattern.getName();
    color=pattern.getColor();
  }

  Integer getValue() {
    return new Integer(value);
  }

  String getName() {
    return new String(name);
  }

  String getColor() {
    return new String(color);
  }
}

class Deck implements Iterable {
  private List<Card> deck = new LinkedList<Card>();

  public void add(Card c) //dodawania karty do talii
    {
      deck.add(c);
    }

    Card popCard() //wyciąganie karty z talii
    {
      Random r = new Random();
      int index = r.nextInt(deck.size());
      Card tmp = new Card(deck.get(index));
      deck.remove(index);
      return tmp;
    }

    void createFull()
    {
      String[] kolory= new String[]{"kier","karo","pik","trefl"};
      String[] figury=new String[]{"2","3","4","5","6","7","8","9","10","Walet","Dama","Krol","As"};

      for (int i=0;i<4;i++)
        {
          for (int j=0;j<9;j++) //2-10
            {
              Card tmp = new Card(j+2,figury[j],kolory[i]); //generujemy kartę
              deck.add(tmp); //dodajemy do talii
            }
          for (int j=9;j<12;j++) //walet, dama, krol
            {
              Card tmp=new Card(j-7,figury[j],kolory[i]); //generujemy kartę
              deck.add(tmp); //dodajemy do talii
            }
          Card tmp=new Card(11,figury[12],kolory[i]); //as
          deck.add(tmp); //dodajemy do talii
        }
    }

    Integer getValue() //funkcja zwraca wartość wszystkich kart w talii
    {
      Integer sum = 0;
      for (Card c : deck)
        sum+=c.getValue();
      return sum;
    }

    boolean isEmpty()
      {
        return deck.isEmpty();
      }

  public Iterator iterator() {
    return deck.iterator();
  }

Przykład użycia:

Deck talia = new Deck();
talia.createFull();
//talia.pop() wylosuje kartę i ją zwróci
//możesz też stworzyc pustą talię i do niej dodawać
Deck reka = new Deck();
reka.add(talia.pop());
0

nie, nie. Porownania wydają się ok, tylko....... co robi średnik na końcu if-a ;P?

1 użytkowników online, w tym zalogowanych: 0, gości: 1