2010-01-30 9 views
2

J'ai écrit un programme simple pour comprendre le fonctionnement de l'objectif-c. Ce programme est l'i-ching, une divination ancienne basée sur une réponse à six lignes, calculée après avoir lancé trois pièces six fois, puis construit un hexagramme qui est la réponse.très simple objectif-c question

Je suis bloqué à cela, que je suis sûr a une solution simple. C'est ainsi que j'ai défini les lignes, je sais que ce n'est pas le meilleur design, mais j'essaie d'utiliser autant de technologie que possible. En supposant que vous lancez une pièce de monnaie, il peut être 3 ou 2 selon le côté, trois pièces de monnaie résultent en valeur possible 6,7,8,9.

/** 
    * identifying a coin 
    */ 
typedef enum { 
    head=3, 
    tail=2 
} Coin; 

/** 
    identify a line, three coins with a side value of 
    2 and 3 can result in 6,7,8,9 
    */ 
typedef enum { 
    yinMutable=tail+tail+tail, // 6 --> 7 
    yang=tail+tail+head, // 7 
    yin=head+head+tail, // 8 
    yangMutable=head+head+head // 9 --> 8 
} Line; 

/** 
    The structure of hexagram from bottom "start" to top "end" 
    */ 
typedef struct { 
    Line start; 
    Line officer; 
    Line transit; 
    Line minister; 
    Line lord; 
    Line end; 
} Hexagram; 

Le premier problème que je rencontre avec cette conception est d'attribuer une valeur à chaque ligne dans Hexagram. Le premier lancement devrait remplir la valeur au début, le deuxième dans l'agent .... et ainsi de suite. Mais peut être facilement résolu avec un boîtier de commutateur ... même si je ne l'aime pas.

1) Première question: Je me demande s'il existe une fonction comme javascript ou C# comme foreach (propriété dans Hexagram) qui me permet de parcourir les propriétés dans leur ordre de déclaration, cela résoudrait mon problème.

2) Deuxième question: comme alternative je un tableau de la ligne:

Controller.m 
.... 
Line response[6] 
.... 

-(id) buildHexagram:... { 

for(i =0.....,i++)..... 
    response[i]=throwCoins; 

// I omit alloc view and the rest of the code...then 
[myview buildSubview:response]; 
} 


---------------------- 
subView.m 


-(id) buildSubView:(Line[]) reponse { 

NSLog(@"response[0]=%o",[response objectAtIndex[0]]); <--- HERE I GOT THE ERROR 
} 

mais, petit morceau de cette solution, je suis un EXC_BAD_ACCESS d'erreur Alors, évidemment, je comprends mal comment fonctionne tableau dans Objective c ou c! Dans l'espoir que je me suis fait assez clair, quelqu'un peut-il indiquer la solution à la première question, et ce que je fais mal dans la deuxième option.

grâce Leonardo

Répondre

3

Vous avez créé un tableau C de la ligne - pour accéder aux éléments dont vous avez besoin pour utiliser le tableau de style C accesseurs.

Ainsi, au lieu de

[response objectAtIndex[0]] 

utilisation

response[0] 
+0

Salut ... qui a fonctionné, mais j'ai une autre question fondamentale un. Dans la méthode de réception, je voudrais faire une affectation: Ligne therespone [6]; <- variable de classe - (id) buildSubView: (Line []) reponse { theresponse = réponse; <- ceci déclenchera une erreur d'affectation invalide de construction ........ } mais je ne peux pas, car le compilateur se plaignait d'un "types incompatibles dans l'affectation". – Leonardo