2017-01-13 17 views
0

だから私はこのようになりますカードのクラスがあります。Returnステートメント

public class Card 
{ 
    //instance variables 
    private String faceValue; //the face value of the card 
    private String suit; //the suit of the card 
    String[] ranks = {"Ace", "2", "3", "4", "5", "6","7", "8", "9", "10", "Jack", "Queen", "King"}; 
    String[] suits = {"Clubs", "Diamonds", "Hearts", "Spades"}; 

/** 
* Constructor 
*/ 
public Card(int aValue, int aSuit) 
{ 
    faceValue = ranks[aValue]; 
    suit = suits[aSuit]; 
} 

//getters 
/** 
* Getter for faceValue. 
*/ 
public String getFaceValue() 
{ 
    return faceValue; 
} 

/** 
* Getter for suit. 
*/ 
public String getSuit() 
{ 
    return suit; 
} 
//end of getters 

//methods 
/** 
* This method returns a String representation of a Card object. 
* 
* @param none 
* @return String 
*/ 
public String toString() 
{ 
    return "A card: " + faceValue + " of " + suit; 
} 
} 

そして、このようになりますデッキクラス:デッキショーで

public class Deck 
{ 
    //instance variables 
    private Card[] deck; 

/** 
* Constructor for objects of class Deck 
*/ 
public Deck() 
{ 
    deck = new Card[52]; 

    int cardCount = 0; //number of cards created so far. 
    for (int aSuit = 0; aSuit < 4; aSuit++) 
    { 
     for (int aValue = 0; aValue < 13; aValue++) { 
      deck[cardCount] = new Test(aValue, aSuit); 
      cardCount++; 
     } 
    } 
} 

/** 
* String representation. 
*/ 
public String toString() 
{ 
    for (int i = 0; i < 52; i++) 
    { 
     String v = deck[i].getFaceValue(); 
     String s = deck[i].getSuit(); 
     return "Dealt a card: " + v + " of " + s + "."; 
    } 
} 
} 

私のtoStringメソッドをエラー "missing return statement"がありません。ループごとにカードの詳細を印刷できるようにしながら、returnステートメントを変更するにはどうすればよいですか?

+2

ループ中に戻ると、リストの最初の要素だけが返されます –

+2

'toString()'のJavaDocを読んでwh (これは、ログステートメントを生成しないためのものです)、 'Card.toString()'は単一のカードを表現しているので問題ありませんが、Deck.toString() tはデッキを表しますが、むしろ何らかのアクション(または少なくとも「カードを扱う...」はそうであることを意味します)。代わりに、おそらく、ログ・ステートメントを直接出力するか、後で使用するための文字列のリストを返すメソッドを提供したいと思うでしょう。 – Thomas

+0

まず、あなたのtoStringは、あなたがそのエラーを持っていなくても、あなたがしたいことをするつもりはありません。文字列を集約し、関数の終わりに1回戻す変数を作成する必要があります。そのままループの最初の繰り返しを実行して戻ります。 – Rob

答えて

2

コードは、デッキ配列の0番目の要素のみを返します。あなたのtoStringメソッドが戻り値の型文字列を持っているため、エラーがある

public String toString() 
{ 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < 52; i++) 
    { 
     String v = deck[i].getFaceValue(); 
     String s = deck[i].getSuit(); 
     sb.append("Dealt a card: ").append(v).append(" of ").append(s).append(".\n"); 
    } 
    return sb.toString(); 
} 
0

:それは次のようにする必要があります。
実行パスのJavaチェック。 forループが終了して何も返さない場合はどうなりますか?

あなたはそのロジックをハードコードしているかもしれませんが、Javaコンパイラはその統計分析を行いません。したがって、何も動作しない場合は、実行することが確実な型Stringを返す必要があります。

これは動作します:

public String toString() 
{ 
    for (int i = 0; i < 52; i++) 
    { 
     String v = deck[i].getFaceValue(); 
     String s = deck[i].getSuit(); 
     return "Dealt a card: " + v + " of " + s + "."; 
    } 
    return ""; 
} 

をしかし、私はあなたが何をしたいと思いますが、このです:

public String toString() 
{ 
    StringBuilder returnValue = new StringBuilder(""); 
    for (int i = 0; i < 52; i++) 
    { 
     String v = deck[i].getFaceValue(); 
     String s = deck[i].getSuit(); 
     returnValue.append("Dealt a card: " + v + " of " + s + "."); 
    } 
    return returnValue.toString(); 
} 
0

uはちょうどすべてのカードに関する情報を印刷したい場合は、uが

public String toString(){ 
    for (int i = 0; i < 52; i++) 
    { 
    String v = deck[i].getFaceValue(); 
    String s = deck[i].getSuit(); 
    System.out.println("Dealt a card: " + v + " of " + s + "."); 
    } 
    return null; 
} 
を使用することができます
+0

さて、私はなぜこれについて長いこと考えなかったのか分かりません。私はtoStringメソッドだけを返すものに慣れています。どうもありがとうございます! – X88B88

関連する問題