我是編程新手。我試圖了解代碼的含義以及如何使用嵌套回圈創建一副牌。
String [] rank = {"A" , "2" , "3", "4", "5", "6", "7", "8", "9", "10" , "J", "Q" , "K"};
String [] suit = {"C", "D", "S" , "H"};
String [] deck = new String [52]
我試著寫:
for(int i = 0; i < rank.length; i ){
for (int j = 0; j < suit.length; j ){
System.out.println(suit[i] cards[j]);
}
}
但這只會列印(CA、C2、C3、C4、DA...)我的代碼不會列印 C5、C6...
但是如果我換牌和西裝,把西裝放到外回圈,它會列印所有的。我想不通為什么?
for(int i = 0; i < suit.length; i ){
for (int j = 0; j < rank.length; j ){
另外,答案的關鍵是:
for(int i = 0; i < cards.length; i ){
for (int j = 0; j < suit.length; j ){
deck[i 13*j] = rank [i] suit [j];
}
}
我真的不明白是什么deck[i 13*j] = rank [i] suit [j]意思?
答案鍵表示我們是否要更改牌組以將卡片按順序排列在陣列中,我們只需將代碼更改為deck[4*i j] = rank [i] suit [j]
我想知道是否有人可以幫助我理解代碼中的含義deck[4*i j]和deck [i 13*j]含義?
如何更改我的代碼以列印“AC、AD、AS、AH、2C、2D、2S、2H...)?
抱歉,很難描述我的問題。非常感謝您的時間和幫助!
uj5u.com熱心網友回復:
由于您的計數器變數i正在遍歷您的rank和j遍歷的suit,因此切換變數將正確輸出它們:
for(int i = 0; i < rank.length; i ){
for (int j = 0; j < suit.length; j ){
System.out.println(suit[j] rank[i]);
}
}
輸出:
CA
DA
SA
HA
C2
D2
S2
H2
C3
D3
S3
H3
C4
D4
S4
H4
C5
D5
S5
H5
C6
D6
S6
H6
C7
D7
S7
H7
C8
D8
S8
H8
C9
D9
S9
H9
C10
D10
S10
H10
CJ
DJ
SJ
HJ
CQ
DQ
SQ
HQ
CK
DK
SK
HK
但是,如果要將這些值存盤在陣列中,則需要做更多的作業。
i代表我們當前的等級/價值,而j代表我們當前的西裝。如果我們想要串列去: {CA,DA,SA,HA,C2,D2....},那么我們需要做一些數學運算。
i從 0 到 12j再從 0 到 3。我們希望我們的第一個 ij 對 0 和 0 鏈接到 0 的第一個索引deck,最后一個 ij 對 12 和 3 鏈接到我們的最終索引deck, 51.
就單詞而言,每個 ij 對的索引是“我們當前的排名乘以 4 加上我們當前的套件”。
對此進行建模的“方程式”是:Index = i * 4 j
因此我們的代碼將是:
for(int i = 0; i < rank.length; i ){
for (int j = 0; j < suit.length; j ){
deck[4 * i j] = suit[j] rank[i];
}
}
或者,您可以將其視為“將我們當前的套件乘以 13 并添加我們的排名”,它會生成您提供的代碼。這將按等級排序,所以它會像:
{CA,C2,C3,....DA,D2,D3....}
任何一個都有效!
我希望這會有所幫助,如果您需要任何進一步的細節或澄清,請告訴我:)
uj5u.com熱心網友回復:
正如Ani M 的回答所解釋的那樣,你把你的i和j. 正如此評論所解釋的,您混淆了陣列名稱。
讓我們改進您的陣列名稱和內容。通常,復數名稱對集合更有意義。Unicode 定義了卡片套裝的字符,所以讓我們使用它們。
String[] ranks = { "A" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , "10" , "J" , "Q" , "K" };
String[] suits = { "?" , "?" , "?" , "?" }; // Order in which they are defined in Unicode.
String[] deck = new String[ 52 ];
使用for-each語法而不是傳統for的回圈使代碼更易于閱讀和撰寫。
int index = 0;
for ( String rank : ranks )
{
for ( String suit : suits )
{
deck[ index ] = rank suit;
index ;
}
}
將結果轉儲到控制臺。
System.out.println( "deck = " Arrays.toString( deck ) );
跑的時候。
Arrays.toString( ranks ) = [A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K]
Arrays.toString( suits ) = [?, ?, ?, ?]
Arrays.toString( deck ) = [A?, A?, A?, A?, 2?, 2?, 2?, 2?, 3?, 3?, 3?, 3?, 4?, 4?, 4?, 4?, 5?, 5?, 5?, 5?, 6?, 6?, 6?, 6?, 7?, 7?, 7?, 7?, 8?, 8?, 8?, 8?, 9?, 9?, 9?, 9?, 10?, 10?, 10?, 10?, J?, J?, J?, J?, Q?, Q?, Q?, Q?, K?, K?, K?, K?]
因此,該代碼解決了您的問題:
如何更改我的代碼以列印“AC、AD、AS、AH、2C、2D、2S、2H...)?
至于您的答案關鍵解決方案,聰明的數學在 Ani M 的另一個答案中進行了解釋。我將簡單地添加一個注釋,即這種聰明的代碼在實際作業中可能更多的是一種責任而不是幫助。當試圖在半夜修復錯誤時,這樣的代碼可能是除錯和修改的噩夢。撰寫愚蠢的簡單代碼通常比華而不實的聰明解決方案更可取。
為了好玩,讓我們得到由特定 Unicode 字符表示的最終卡片。
我們可以通過 Unicode Consortium 指定的正式名稱來確定一個字符。有關使用方法的另一個問題,請參閱此答案。Character.codePointOf(String name)
String[] ranks = { "ACE" , "TWO" , "THREE" , "FOUR" , "FIVE" , "SIX" , "SEVEN" , "EIGHT" , "NINE" , "TEN" , "JACK" , "QUEEN" , "KING" };
String[] suits = { "SPADES" , "CLUBS" , "HEARTS" , "DIAMONDS" };
String[] deck = new String[ 52 ];
int index = 0; // Annoying zero-based counting.
for ( String rank : ranks )
{
for ( String suit : suits )
{
String characterName = "PLAYING CARD " rank " OF " suit;
int codePoint = Character.codePointOf( characterName );
String cardCharacter = Character.toString( codePoint );
deck[ index ] = cardCharacter;
index ;
}
}
結果:
Arrays.toString(deck) = [??,??,??,??,??,??,??,??,??,??,??,??,??,??,??,??,??,??,??,??,??, ??,??,??,??,??,??,??,??,??,??,??,??,??,??,??,??,??,??,??,??,??,??,??, ??,??,??,??,??,??]
uj5u.com熱心網友回復:
作為替代方案,您可以只使用一個回圈。
i/13將產生值0-3(整數數學,所以分數被洗掉)i將產生價值0-12
String [] rank = {"A" , "2" , "3", "4", "5", "6", "7", "8", "9", "10" , "J", "Q" , "K"};
String [] suit = {"C", "D", "S" , "H"};
String [] deck = new String [52];
for (int i = 0; i < deck.length; i ) {
deck[i] = rank[i%13] suit[i/13];
}
for (String card : deck) {
System.out.println(card);
}
印刷
AC
2C
3C
4C
5C
...
...
...
我將它們分配為等級套裝,因為這是大多數卡片的參考方式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/431644.html
上一篇:如何在Python中進行for和while回圈以獲得相同的答案?
下一篇:郵遞員回應正文“訊息”消失
