method questions

Started by
8 comments, last by Akusei 10 years, 2 months ago
Im working on a project for class where we take a card class and its assigned two values, one for number one for suit. My problem is i need to use two methods called toString and compareto. This would be someone okay except in the tester he does something like Card c1 =new Card(Card.CLUBS, 4) im not sure what the card.clubs is, if anyone can lead me in the right direction, im ay work on my phone, so ill be able yo check back and clarify around 5 pm. Also i dont want anyone to write any code for me, this is, again, a class project, i just can think of what to do, thank you.
Advertisement

Card.CLUBS is most likely a static final of a data type. I say a data type and don't give a specific type because without the signature of Card's constructor or the source/compiled class for Card, you have no way of knowing what exactly it is. Here is an example of it as an integer.


public class Card
{
   public static final int CLUBS = 1;
}
-akusei
I... love...you... that perfectly answers that, i know what to do for that now. Ty! !

Looks like an enum to me.


public enum Card
{
    CLUB, SPADE, HEART, DIAMOND
}

If you have to do that sort of stuff use Java enums, that's why they're for. Integer enumerations are annoying and unsafe to use (ie, if its an integer you could do new Card(-128, 4), if its a true enum it wouldn't compile).

"I AM ZE EMPRAH OPENGL 3.3 THE CORE, I DEMAND FROM THEE ZE SHADERZ AND MATRIXEZ"

My journals: dustArtemis ECS framework and Making a Terrain Generator

It's most definitely not an enum. The class being instantiated is Cards and it's passing Cards.CLUBS with no namespace. Try the following:


public enum Cards
{
   CLUBS
}

public class Cards
{
}

This will not compile because they are in the same package and have the same name. Without a namespace on the Cards enum being passed into the Cards constructor, it will not compile.

-akusei

Now that I'm thinking... If that is exactly the line of code, it can't be an enum, you can't instantiate a new enum object. They get initialized only once in Java, constructor is private.

Now if it's something like new Card (Cards.CLUB, 4) that would be an enum.

In any case my recommendation still stands, use enums instead of integer statics for that sort of thing (ie categorization).

EDIT: Sort of ninja'd, through not for the same reasons :D

"I AM ZE EMPRAH OPENGL 3.3 THE CORE, I DEMAND FROM THEE ZE SHADERZ AND MATRIXEZ"

My journals: dustArtemis ECS framework and Making a Terrain Generator

Now that I'm thinking... If that is exactly the line of code, it can't be an enum, you can't instantiate a new enum object. They get initialized only once in Java, constructor is private.

Now if it's something like new Card (Cards.CLUB, 4) that would be an enum.

In any case my recommendation still stands, use enums instead of integer statics for that sort of thing (ie categorization).

I agree with TheChubu, although your exact line of code tells me that it's definitely not an enum and my reply gave you what it most likely is, I would suggest using an enum instead.


public enum Cards
{
   CLUB
}

public class Card
{
   public Card(Cards cardType, int value) { }
}

//usage
Card card = new Card(Cards.CLUB, 4);

Take note though, it's better to use enums when making something in Java for a typical OS, like Linux or Windows but in some cases, like programming in Java for Android it's best to use the "static final int" as this provides better performance; at least last I heard.

-akusei

I'm not sure in enum is what he wants for this program, I'm finally home so, here's a small snippet of the CardTester.java that the Card.Java has to work with.


public class CardTester 
{	
	/**
	 * Application ... has to have main method.
	 * 
	 * @param args Not used.
	 */
	public static void main(String[] args) 
	{
		Card c1 = new Card(4,Card.CLUBS);
		Card c2 = new Card(Card.KING, Card.HEARTS);
		Card c3 = new Card(Card.ACE, Card.DIAMONDS);

		System.out.println( c1 );
		System.out.println("4 of Clubs" + " EXPECTED");
		System.out.println( c2.toString() );
		System.out.println("King of Hearts" + " EXPECTED");

		//compare 4 of clubs (c1) with king of hearts (c2)  (should be smaller: -1)
		System.out.println( "\nComparing cards: " + c1.compareTo(c2) );
		System.out.println( " Expected value: " + -1 );

		//compare king of hearts (c2) with 4 of clubs (c1) (should be larger: 1)
		System.out.println( "\nComparing cards: " + c2.compareTo(c1) );
		System.out.println( " Expected value: " + 1 );

And here is another smaller snippet, which is making me think he wants multiple constructors,


final int A_BUNCH_OF_TESTS = 12;

		Random gen = new Random();

		for(int i=0; i<A_BUNCH_OF_TESTS; i++)
		{

			//create two random cards
			Card temp1 = new Card(gen.nextInt(13)+1, gen.nextInt(4) );
			Card temp2 = new Card(gen.nextInt(13)+1, gen.nextInt(4) );

So, with this in mind, does this send us straight back to Akusei's initial public static final int CLUBS = 0;?

This topic is closed to new replies.

Advertisement