0

デバッグ ログは次のようになります。

2013-06-09 17:09:09.192 BridgeDeal[2430:11303] suito: 2K
2013-06-09 17:09:09.193 BridgeDeal[2430:11303] suit: 50
2013-06-09 17:09:09.193 BridgeDeal[2430:11303] suito: 2Q
2013-06-09 17:09:09.193 BridgeDeal[2430:11303] suit: 50
2013-06-09 17:09:09.194 BridgeDeal[2430:11303] suito: 3J
2013-06-09 17:09:09.194 BridgeDeal[2430:11303] suit: 51

上記の値suitoは正しいですが、上記の値ではありませんsuit。の値の代わりに、suit2,2,3 を取得したいと考えています。

for (int i = 0; i<3; i++) {
    NSInteger suit = [[self.cardList objectAtIndex:i ] characterAtIndex:0] ;
    NSLog(@"suito: %@", [self.cardList objectAtIndex:i ]);
    NSLog(@"suit: %d", suit);

}

cardlist以下のように宣言されています。

@property (nonatomic, weak) NSMutableArray *cardList;

次のコードを試しましたが、エラーが発生します。bUnexpected type name 'NSRange'

NSInteger suit = [[self.cardList objectAtIndex:i ] substringWithRange:NSRange(0,1)]  ;
4

2 に答える 2

1

に変更NSLog(@"suit: %d",suit);NSLog(@"suit: %d",suit - '0');ます。

NSString オブジェクトで characterAtIndex を呼び出すと、unichar (unsigned short) 変数が返されます。次に、その値を NSInteger に格納します。あなたはそれがあなたにエラーを与えると思うでしょう。そうでない理由は、unichar (および C では char) 変数が実際には整数であるためです (この場合、unichar は unsigned short で型定義されているだけです)。各文字 ('a'、'b'、'c'、'd' など) には、異なる番号が関連付けられています。ASCII 文字セットの文字 '2' に関連付けられた数は 50 で、'3' に関連付けられた数は 51 です。すべて連続しているため、「0」の値を減算することで表される実際の数値を取得する方法を「ハック」できますsuit - '0')。「0」の値 (ASCII) は 48 であるため、これを引くと、50、50、および 51 ではなく、2、2、および 3 が得られます。

カード スーツを数字として表現している場合は、それらを文字列ではなく数字として配列自体に格納することを検討してください。

于 2013-06-09T22:42:25.183 に答える