final については、フィールドに値を設定後、その値を不変(上書禁止)にする。
というもので、普通に使うだけであれば、他言語における『定数』的な扱い。
という理解で十分でしょう。ただし、オブジェクトに使う場合は例外があるため、
詳しく知りたい場合は(難しいですが)『イミュータブル』という概念を調べると良いです。
public class Deal {
public static void main(String args[]) {
int numHands = Integer.parseInt(args[0]);
int cardsPerHand = Integer.parseInt(args[1]);
List<Card> deck = Card.newDeck();
Collections.shuffle(deck);
for (int i=0; i < numHands; i++)
System.out.println(deal(deck, cardsPerHand));
}
public static ArrayList<Card> deal(List<Card> deck, int n) {
int deckSize = deck.size();
List<Card> handView = deck.subList(deckSize-n, deckSize);
ArrayList<Card> hand = new ArrayList<Card>(handView);
handView.clear();
return hand;
}
}
ですが、int deckSize = deck.size(); のsize()はどのように繋がっているのでしょうか。トピック上のコードのdeckを使って上記のサイト上にあるように出力したいのですが、“size()のメソッドが見つからない”と出てきてコンパイル出来ません。
Javaのサイト上のコードのみ(size()のメソッドは無い?)だと書いてあるように出力できるのですが、トピックのコードと組み合わせると“見つからない”と出てくる、、。サイズをどのようにとっているのか理解したいのですが、アドバイスをお願いいたします。
丁寧に説明していただいて、色々と理解できるようになりました。ありがとうございます。添付してくださっているショートカットから
public static ArrayList<Card> deal(Deck deck, int n) {
int deckSize = deck.size();
List<Card> handView = deck.subList(deckSize-n, deckSize);
ArrayList<Card> hand = new ArrayList<Card>(handView);
handView.clear();
return hand;
}
の意味がわかった(と思う)のですが、sizeと同じくsubListもListのメソッドのようで、sizeと同じようにDeckの中にメソッドを追加しないといけないということになると思うのですが、Variableが二つあって、どう書くべきなのかよくわからずエラーが消えません、、。
それと、最終的に例として
EIGHT of SPADES (8), THREE of CLUBS (6), SIX of DIAMONDS (18)
score = 32
のように手の合計を出すためにそれぞれの値、8、6、18を取り出す(して計算する)ためにはどういう方法があるのかもまだひらめきません。
[8 of hearts, jack of spades, 3 of spades, 4 of spades, king of diamonds]
[4 of diamonds, ace of clubs, 6 of clubs, jack of hearts, queen of hearts]
[7 of spades, 5 of spades, 2 of diamonds, queen of diamonds, 9 of clubs]
[8 of spades, 6 of diamonds, ace of spades, 3 of hearts, ace of hearts]