1

文字列比較メソッド「compareTo」を使ったメソッドを作っています。ただし、正確にどのように機能するかについていくつか質問があります。

 public int compareTo(Card player2){    
    int finalRank = this.getRank().compareTo(player2.getRank());


    int turn = this.getRank().compareTo(player2.getRank());

    // Checks for "War" before anything is processed
    if(this.getRank() == player2.getRank())
    {
    return 0; // results in war
    }

    //This logic sets Ace as the highest card
    //after checking for "WAR"
    else if(this.getRank() == Rank.ACE)
    {
    return 1;
    }


    else if(player2.getRank() == Rank.ACE)
    {
    return -1;
    }


    //If it is not an ace, the winner per turn
    //is determined by standard value.
    else if(turn > 0)
    {
        //System.out.println("playerOne wins");
    return 1;
    }

    else 
    {
        //System.out.println("playerTwo wins");
    return -1;  
    }   

        }//end compareTo

これは、compareTo メソッドのコードの一部です。**言及できるように、このコード セグメントについてかなりの量のオンライン ヘルプを受け取りました。私に説明されている間、それは理にかなっています。したがって、私にとって意味があれば、このコードのセグメントを別の形式で書き直すことができるはずです。しかし、私はそうすることができないことに気づきました。したがって、私はアドバイスと助けを求めています。

関数

int turn = this.getRank().compareTo(player2.getRank());

一般的に私を失望させるものです。compareTo メソッドは正確に何をしているのですか?

プレーヤーのターンでは、プレイ中の 2 枚のカードを比較します -> プログラムのロジックに従います。

compareTo メソッドを使用せずにカードを比較することはできますか?

クラスコンストラクターをセットアップする方法は次のとおりです。

もう一度、ファイナライズします。compareTo メソッドの仕組みを理解するのに問題があります。そして、プレイ中のプレイヤーカードを比較する別の方法の提案があれば.

カードリストは2つの別々のクラスから来ています - >スーツとランク

private Rank rCard;
  private Suit sCard;

/** * ** * ** * ** * ** * ** * ** * ** * ** * Card クラス外のオブジェクトの初期化 * @param rCard * @param sCard * * ** * ** * ** * ** * ** * ** * ** * ** * */ public Card(Rank rCard, Suit sCard) { this.rCard = rCard; this.sCard = sCard; }

4

1 に答える 1

1

まず第一に、compareTo()メソッドの目的は、2 つのオブジェクトを比較可能にするものを定義することです。すべてのオブジェクトが比較できるわけではありません。一部のオブジェクトは、Java API によって比較可能になります。たとえば、String比較可能です。したがって、 などのメソッドを使用する場合Collections.sort(someStringArray)、オブジェクトが比較可能であるため、このタスクを実行できます。一方、オブジェクトsort()の配列が必要な場合は、オブジェクトを比較可能にするCardまで実現できません。メソッドCardを使用してこれを行います。また、メソッドを @Override する必要があるインターフェイスとしてクラスcompareTo()を定義したいと考えています。これにより、ランクごとに比較することにした場合、ランクごとに比較できます。Cardimplements ComparablecompareTo()CardscompareTo().

あなたがしようとしているのは、2 つのオブジェクトをランク別に比較することだと思います。

int turn = this.getRank().compareTo(player2.getRank());

is generally what throws me off. What exactly is the compareTo method doing?

のランクを と比較していますが、これは のランクでthisあると想定しています。メソッドを使用すると、 が返されます。これは、どちらのプレイヤーのランクが高いかを示しています...つまり、のランクが高く、のランクが高く、ランクが等しいことを意味します。これで誰の番かが決まると思いますPlayer1player2compareTo()intint1player1-1player20int

また、私はこれを信じています:

int turn = this.getRank().compareTo(player2.getRank());

メソッドの外に配置する必要があり、次のcompareTo()ように変更する必要があります。

int turn = this.compareTo(player2);

でプレイヤーをランク別に比較しているcompareTo()ため、 を使用する必要はありませんgetRank()。完全なコードを持っていないため、これで問題が完全に解決するかどうかはわかりませんが、compareTo()メソッドがどのように機能するかをよりよく理解できることを願っています.

于 2013-10-13T03:43:52.587 に答える