thatsnifty
thatsnifty

Reputation: 201

Problems on poker game and comparator?

I am trying to create a poker game in which I create the deck in the Card class, and use a comparator to sort the deck in alphabetical order. I'm having trouble with what to put in the comparator, and in my dealer class, (this is where I create the deck, shuffle, as well as calling the comparator). When my CompareCards does compile, my Dealer class will give me the error of:

    Dealer.java:24: error: incompatible types: void cannot be converted to String
    String s = Collections.sort(deck);
                               ^
 Note: Dealer.java uses unchecked or unsafe operations.
 Note: Recompile with -Xlint:unchecked for details.

I know that when doing the sort, you have to include the Comparator name, but in this case it doesn't work either way. Here is my card class:

import java.util.*;
public class Card{
    String suit = null;
    String value = null;
    String rank = null;

    public static final String[] SUIT = {"C", "D", "H", "S" };

    public static final String[] RANK = {"A","2","3","4","5","6","7","8","9","T","J","Q","K"};

    public Card(int i, int j){
        suit = RANK [i];
        rank = SUIT [j];
        value = rank + suit;
    }
    public String getSuit(){
        return suit;
    }

    public String getRank(){
        return rank;
    }

    public String toString(){
        return(value);
    }
}

Here is my Comparator and CompareCards class:

public interface Comparator <Card>{
    public int compare(Card o1, Card o2);
}

public class CompareCards implements Comparator<Card>{
    public int compare(Card c1, Card c2){
        int x = 0;
        int y = 0;
        int dx = c1.getRank() - c2.getRank();
        if(dx == 0){
            x = c1.getRank()-c2.getRank();
        }
        else{
            y = c1.getSuit() - c2.getSuit();
        }
        return x;
    }

And here is the dealer class:

import java.util.*;
public class Dealer{

public static void main(String[]args){
    // creating deck
    List<Card> deck= new ArrayList<Card>();

    // calling Card
    for(int i = 0; i < 13  ; i++){
        for(int j = 0; j < 4 ; j++){
            // String s = RANK[i] +SUIT[j];
            deck.add(new Card(i, j));
        }
    }
    finding21(deck);
}

public static void finding21 (List deck){

    String s = Collections.sort(deck);
    System.out.println("Sorted deck: " + s);
    // After I sort the deck I am supposed to do a binary search
    // for the queen of hearts
     /* Collections.shuffle(deck);
          System.out.println("Shuffled deck: " + deck);
          String HQ =  Collections.binarySearch(deck, "HQ");
          System.out.print(HQ);

          System.out.println(queenH);*/
    }
}    

Upvotes: 1

Views: 225

Answers (1)

b4hand
b4hand

Reputation: 9770

Collections.sort does an in-place sort and does not return a value.

That's why the compiler says you can't convert a void to a String.

The void type is used for functions with no return value.

Just use:

Collections.sort(deck);

If you want to print the sorted deck after, you can use:

System.out.println("Sorted deck: " + deck);

Upvotes: 4

Related Questions