同一类的两个对象中的实例变量值(Objective C)

时间:2014-04-17 12:47:34

标签: objective-c variables object

我是Objective C的新手,也是程序员的一般世界(2或3周)。我也是意大利人,所以使用英语和正确的术语对我来说很难。

我创建了一个课程:" Mano" (手)及其实例和方法:m1和m2。

我的问题是:如何用m2读取m1变量值?

m1和m2例如" int a; A = 0;"

然后m1,执行一个方法,设置a = 10

m2如何阅读m1' s?如果m2简单地读取它自己读取a ... a = 0,对吗?

再次抱歉,但我不知道如何解释自己比这更好!

3 个答案:

答案 0 :(得分:0)

基本上,如果它们不是同一种物体那么相同。首先,制作你想要阅读的内容:

//  Hand.h
#import <Foundation/Foundation.h>

@interface Hand : NSObject

// Each hand maintains a value
@property (assign) int a;

// This makes it easy to show two Hands working together...not necesary
- (instancetype)initAsFirst:(BOOL)first;
@end

然后,使用对另一个对象的引用:

//  Hand.m
#import "Hand.h"

@implementation Hand

// To start, some other object will call this with first set to YES.
- (instancetype)initAsFirst:(BOOL)first
{
    self = [super init];
    if (self) {
        if (first) {

// The first Hand will create a second one to demonstrate the difference.
            self.a = 0;
            [self showHands:[[Hand alloc] initAsFirst:NO]];
        } else {

// The second Hand will have a different value to prove that it's different.
            self.a = 10;
        }
    }
    return self;
}

- (void)showHands:(Hand *)h
{
// Display both the value of this hand (first) and the one this hand created (second)
    NSLog(@"Mine: %d, Other: %d", self.a, h.a);
}
@end

答案 1 :(得分:0)

这是一个简单的RPS(Rock Paper Scissors)游戏,只是为了开始学习一点Objective C编程。最初有两个对象m1和m2作为“计算机手m1”和“玩家手m2”。

当然,你可以看到我加入了两种方法(计算机随机数和人数选择),这样所有的工作都只能由一个对象完成。

当方法被分割时,我在[verdetto](游戏结果)方法中遇到问题,因为m2(我的情况是jn)无法获得对象实例的正确值(我需要m1值)...

这就是我问你问题的原因!

这里有0 = Rock 1 = Scissors 2 = Paper

// File main.m

#import <Foundation/Foundation.h>
#import "mano.h"

int main(int argc, const char * argv[])
{
    int contatore;
    contatore = 1;

    @autoreleasepool {

        mano *m1;
        m1 = [[ mano alloc ] init ];

        //  mano *m2;
        // m2 = [[ mano alloc ] init ]; 

        while (contatore <= 5) {
            NSLog(@"\n Partita N. %d", contatore);
            contatore++;
        [m1 gioco];
        [m1 controlloRisultato]; }
// [m1 generatoreRandom] RANDOM NUMBER GENERATOR to let the computer choose
// [m2 scelta numero]here the player was meant to choose bw 0,1,2.

        [m1 verdetto]; //game results 


    }

    return 0;
}




// File mano.h

#import <Foundation/Foundation.h>

@interface mano : NSObject {


    NSArray *simboli; //Rock Scissors Paper
    NSInteger casuale; // Random Number
    NSInteger scelta; // Player Number
    NSInteger computer; // CPU wins
    NSInteger giocatore; // Player Wins
    NSInteger pareggi; // Draws

    }

- (void) gioco;
- (void) controlloRisultato;
- (void) verdetto;
// - (void) generatoreRandom
// - (void) scelta numero

@end




// File mano.m

#import "mano.h"

@implementation mano

- (id) init {
    self = [super init];
    casuale = 0;
    scelta = 0;
    simboli = [ [ NSArray alloc] initWithObjects: @"Sasso",@"Forbici",@"Carta", nil]; //questo va nella init, giustamente, altrimenti non vale per tutti i metodi.
    return self; }

- (void) gioco {
    scelta =0;
    casuale =0;
    casuale = arc4random_uniform(3);  //il computer sceglie un numero

    // L'utente fa la sua scelta qui sotto
    do {
        NSLog (@"\n \n Inserisci 0 per Sasso, 1 per Forbici, 2 per Carta");
        scanf ("%ld", &scelta);
        if (scelta >2 || scelta <0) NSLog (@" \n Hai inserito un numero NON VALIDO");
    } while (scelta >2 || scelta <0);


}

- (void) controlloRisultato {

    NSLog(@"\nIl computer ha scelto: %@", [simboli objectAtIndex:casuale]);
    NSLog(@"\nTu hai scelto: %@", [simboli objectAtIndex:scelta ]);

    switch (casuale) {

        case (0):
            if (scelta == 0) {
                NSLog (@"\n È un pareggio!");
                ++pareggi;
                break;}

            else if (scelta == 1) {
                NSLog (@"\n Il Computer Vince!");
                ++computer;
                break;}

            else if (scelta == 2) {
                NSLog (@"\n Hai vinto!");
                ++giocatore;
                break;}

        case (1):
            if (scelta == 0) {
                NSLog (@"\n Hai Vinto!");
                ++giocatore;
                break;}

            else if (scelta == 1) {
                NSLog (@"\n È un pareggio!");
                ++pareggi;
                break;}

            else if (scelta == 2) {
                NSLog (@"\n Il computer Vince!");
                ++computer;
                break; }

        case (2):
            if (scelta == 0) {
                NSLog (@"\n Il computer Vince!");
                ++computer;
                break; }

            else if (scelta == 1) {
                NSLog (@"\n Hai Vinto!");
                ++giocatore;
                break; }

            else if (scelta == 2) {
                NSLog (@"\n È un pareggio");
                ++pareggi;
                break;}

            break;

        default:
            break;
    }


    }

- (void)verdetto {
    NSLog(@"\n Vittorie giocatore: %ld", giocatore);
    NSLog(@"\n Vittorie computer: %ld", computer);
    NSLog(@"\n Pareggi: %ld", pareggi);

    if (giocatore > computer) NSLog(@"\n Bravo! Hai vinto tu la partita!");
    else NSLog(@"\n Hai perso! Il computer ha vinto la partita");

}

@end

答案 2 :(得分:0)

现在我有1个班级

@interface mani : NSObject 

可能可以控制游戏结果。

和2个子类:

@interface computer : mani //for random number generator

@interface giocatore : mani //for player choosing number

现在我的问题是让第一堂课(mani)读取它的子类变量,然后做些什么来确定谁是赢家!仍然无法得到它是如何工作的,并且相信我,我正在阅读论坛和电子书!