0

これはスタックオーバーフローでの最初の質問です! xcode で 2 つの配列を使用して文字列を反転しようとしています。インターフェイスをセットアップすると、ボタン、テキスト フィールド、およびラベルが表示されます。ボタンがタッチされると、テキスト フィールドに入るものはすべて逆になります。コードを取得しましたが、紙の上では正しいように見えますが、問題は、たとえば「HELLO」でアプリケーションをテストすると、myArray の内容が「H E」で、reverseArray が「OL L」であることです。このコードをトレースするのにうんざりしている私を助けてくれる人がいたら、感謝します:(((コードは次のとおりです:

@interface ViewController ()
@end


@implementation ViewController
@synthesize textField,string1,string2,reverseArray,myArray;
@synthesize Label1;
- (IBAction)Reverse:(UIButton *)sender {
reverseArray=[[NSMutableArray alloc]init];
string1=[[NSString alloc]init];
string2=[[NSString alloc]init];
string1=textField.text;
myArray=[[NSMutableArray alloc]init];
    for (int i=0; i<=string1.length-1; i++) {
    [myArray insertObject:[[NSString alloc] initWithFormat:@"%c",[string1 characterAtIndex:i]] atIndex:i];

}
    for (int j=0; j<=myArray.count-1; j++) {
    [reverseArray insertObject:[myArray objectAtIndex:myArray.count-1] atIndex:j];
    [myArray removeLastObject];


}
NSLog(@"%@",myArray);
NSLog(@"%@",reverseArray);
4

1 に答える 1

1

2 番目のループでは、「for」ループの終了条件として myArray.count を使用していますが、myArray.count はループの反復ごとに 1 つずつ減少しています。これは、反復ごとに myArray から最後のオブジェクトを削除しているためです。考えてみてください:

First iteration:  j=0; myArray.count - 1 = 4
Second iteration: j=1; myArray.count - 1 = 3
Third iteration:  j=2; myArray.count - 1 = 2

j=3 > myArray.count -1 = 1 であるため、4 回目の反復でここで停止します。

2 番目のループで次のようなことを試してください (注: 私は現在 xCode の前にいないので、次のブロックにエラーがある可能性があります。慎重に考えてください)。

for( int j = string1.length -1; j >= 0; j-- ) {
    [reverseArray addObject:[myArray objectAtIndex:j]];
}
于 2012-09-08T20:51:41.790 に答える