2012-01-12 7 views
0

オブジェクト:すべての私の性質はゼロであり、そして私の配列が、私は数字でそれらを埋めているにもかかわらず、ゼロであると私は私の章の終わりだと、それは次の操作を行うために私に尋ねた

新しいを作成します。 Stocksと呼ばれるFoundationコマンドラインツール。次に、 を購入した在庫を表すStockHoldingという クラスを作成します。 NSObjectのサブクラスになります。インスタンス変数の場合、 は、purchaseSharePriceおよびcurrentSharePrice という名前の2つのフロートと、1つのintという名前のnumberOfSharesを持ちます。 インスタンス変数のアクセサメソッドを作成します。他の2つのインスタンスメソッドを作成します。

  • (float)costInDollars; // purchaseSharePrice * numberOfShares
  • (float)valueInDollars; // currentSharePrice * numberOfShares main()で、配列にStockholdingの3つのインスタンスを入力します。次に は、それぞれの値を配列を繰り返して出力します。

このように私はこの章で学んだことに従いました。私は自分のターミナルアプリを作成しました(これはコンソールにのみ印刷する必要があります)、Objective-Cクラスを追加して、適切な情報であると考えて調整しました。

私は次でそれを満たした私の.hファイルの場合:

@interface StocksHolding : NSObject 


//Declare instance variables { 
    float purchaseSharePrices; 
    float currentSharePrices; 
    int numberOfShares; } 
//Decalre methods 
-(float) costOfDollars; // purchaseSharePrice*numberOfShares 
-(float) valueInDollars; // currentSharePrices*numberOfShares 


//Declare setter and getter methods 
@property float purchaseSharePrices; 
@property float currentSharePrices; 
@property int numberOfShares; 

@end 

とても素晴らしい、私は私の知る限り言うことができるよう問題なく、ということでした。私は自分の実装を.mファイルに書き出しました。ここで私が書いたものである:

@implementation StocksHolding 

@synthesize purchaseSharePrices, currentSharePrices, numberOfShares; 

-(float) coastOfDollars{ 
    return (purchaseSharePrices * numberOfShares); 
} 

-(float) valueInDollars{ 
    return (currentSharePrices * numberOfShares); 
} 

@end 

さて、私はと「黄色の三角形取得していますので注意したいと思います私の上に移動する前に 『を!』それを "(私は手を離れて名前を思い出すことはできません申し訳ありません)。私がクリックすると、「不完全な実装です。サイドバーを見ることで意味するものを見つけました。メソッド定義「costOfDollars」が見つかりません」。私はそれを定義したとほとんど確信しているので、混乱します。 。そのI後

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

int main (int argc, const char * argv[]) 
{ 

    @autoreleasepool { 
     StocksHolding *myFirstStock; 
     StocksHolding *mySecondStock; 
     StocksHolding *myThirdStock; 

     NSArray *myStockHoldings = [NSArray arrayWithObjects:myFirstStock,mySecondStock,myThirdStock, nil]; 

     //Set the values for myFirstStock 
     [myFirstStock setNumberOfShares:(3)]; 
     [myFirstStock setPurchaseSharePrices:(10.50)]; 
     [myFirstStock setCurrentSharePrices:(30.86)]; 

     //Set the values for mySecondStock 
     [mySecondStock setNumberOfShares:(4)]; 
     [mySecondStock setPurchaseSharePrices:(40.80)]; 
     [mySecondStock setCurrentSharePrices:(30.96)]; 

     //Set the values for myThirdStock 
     [myThirdStock setNumberOfShares:(20)]; 
     [myThirdStock setPurchaseSharePrices:(90.50)]; 
     [myThirdStock setCurrentSharePrices:(108.93)]; 


     //Printing the information that has been gathered 
     NSLog(@"There are %lu stocks which I own", [myStockHoldings count]); 
     NSLog(@"The number of shares I own in my first stock is %d", [myFirstStock numberOfShares]); 
     NSLog(@"I bought the first stock for a price of %f and the current price is %f", [myFirstStock purchaseSharePrices], [myFirstStock costOfDollars]); 
     NSLog(@"The value of my stock now is %f", [myFirstStock valueInDollars]); 



    } 
    return 0; 
} 

:この時点で、私はちょうど私のプログラムが正しく、私は私のmain.mファイルに行って、次のコードを追加するものいくつかを実行した場合だけ見て、それに対処する前に、上に移動したかったです私の頭の中でこれをすべて理解するという点では、私が達成したことにかなり感銘を受けましたが、ここではすべてが爆発しました。プログラムを実行したが、うまくいったが、私の出力は私が期待していたものではなかった:

[プロセス3063スレッド0x0に切り替える] 2012-01-12 15:12:52.389 株[3063:707]自分自身が所有する株式があります2012-01-12 15:12:52.392株[3063:707]最初の 株の所有株式数は0です2012/01/12 15:12:52.394株[3063:707]最初の 株を0.000000の価格で購入しました。現在の価格は0.000000 2012-01です-12 15:12:52.395株式[3063:707]私の株式の価値が今 0.000000プログラムの終了コードで終了です:0

私のすべての値がゼロです。なぜこのことなのか理解できません。おそらく、私がこの章で考えていた何かを理解していないことを意味しています(この章では自分のクラスを作成していました)。誰かが私が正確にここで間違ってやっていることを理解するのを助けることができますか?

+1

"costOfDollarsは" "coastOfDollars" と同じではありません。 –

+0

うわー!あなたはそれがあなたの全体のプログラムを捨てることができるような小さな事であることを見ます。ありがとうございました! – David

+1

プログラミングに関しては、「小さなもの」はありません。 –

答えて

1

後者の問題は、あなたが宣言したが、メインであなたのクラスを初期化していないということです。

StocksHolding *myFirstStock; 
StocksHolding *mySecondStock; 
StocksHolding *myThirdStock; 

StocksHolding *myFirstStock = [[StocksHolding alloc] init]; 
StocksHolding *mySecondStock = [[StocksHolding alloc] init]; 
StocksHolding *myThirdStock = [[StocksHolding alloc] init]; 

コードの最初の部分は、いくつかの問題があまりにも有しなければなりません。あなたは、おそらくの.hであなたのインスタンス変数を宣言する必要はありませんが、代わりに.mファイルに、必要がそれらを見えるようにしないようにしても、同じ名前のプロパティアクセサを持っています。また、コメントアウトされている{私は書式設定の問題だと思います...?

おそらく

ないすべてのエラー(ないところ私は今コンパイルしてテストすることができます)、私は誰よりワシ目が私を修正します確信している:)

+0

ありがとうございました。誰かが私が誤字を犯して、costOfDollarsを1か所に、coastOfDollarsを別の場所に書きました。 – David

0

たちのもののために、まだ答えの検索で(または少なくとも1つの可能な方法)、ここに私の試みがあります。私がObjの完全な初心者であるので、私と穏やかになりなさい。 C(または一般的には、プログラミング)、それは私のためにうまくいくようですが。 Hillegass'本の中で提起質問に基づいて記載されているコードに注意してください:

main.m:

// main.m 
// Stocks 
// 
// Created by Eelco Plugge on 7/19/13. 
// Copyright (c) 2013 Eelco Plugge. All rights reserved. 
// 

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

int main(int argc, const char * argv[]) 
{ 

    @autoreleasepool { 
     StockHolding *firstInstance = [[StockHolding alloc] init]; 
     StockHolding *secondInstance = [[StockHolding alloc] init]; 
     StockHolding *thirdInstance = [[StockHolding alloc] init]; 

     // Create an empty mutable array 
     NSMutableArray *stockArray = [NSMutableArray array]; 

     // Add instances 
     [stockArray addObject:firstInstance]; 
     [stockArray addObject:secondInstance]; 
     [stockArray addObject:thirdInstance]; 

     [firstInstance setPurchaseSharePrice:2.3]; 
     [firstInstance setCurrentSharePrice:4.5]; 
     [firstInstance setNumberOfShares:40]; 

     [secondInstance setPurchaseSharePrice:12.10]; 
     [secondInstance setCurrentSharePrice:10.56]; 
     [secondInstance setNumberOfShares:20]; 

     [thirdInstance setPurchaseSharePrice:45.10]; 
     [thirdInstance setCurrentSharePrice:48.51]; 
     [thirdInstance setNumberOfShares:210]; 

     for (id stock in stockArray) 
     { 
      // Calculate the (current) value of the stock using the valueInDollars method 
      float value = [stock valueInDollars]; 
      // Calculate the purchase price of the stock using the costInDollars method 
      float cost = [stock costInDollars]; 
      // Calculate the profit gained thus far 
      float profit = (value - cost); 

      // Return the results to the log 
      NSLog(@"You've got %d stocks, which costed you %.2f and are now worth %.2f. The profit for this stock thus far is %.2f", [stock numberOfShares], cost, value, profit); 
     } 
    } 
    return 0; 
} 

はここStockHolding.hファイルです。このアクセサリーのショートカット@propertyと@synthesizeは、この本の尋ねられるように使用されていることに注意してください。

// 
// StockHolding.h 
// Stocks 
// 
// Created by Eelco Plugge on 7/19/13. 
// Copyright (c) 2013 Eelco Plugge. All rights reserved. 
// 

#import <Foundation/Foundation.h> 



@interface StockHolding : NSObject 
{ 
    float purchaseSharePrice; 
    float currentSharePrice; 
    int numberOfShares; 
} 

@property float purchaseSharePrice; 
@property float currentSharePrice; 
@property int numberOfShares; 

- (float)costInDollars; // purchaseSharePrice * numberOfShares 
- (float)valueInDollars; // currentSharePrice * numberOfShares 

@end 

そして最後に、StockHolding.m:これは誰もが、現在の本を通過または情報のビット興味深い(。OBJのC時またはおそらくコミカルな試み)としての役割を果たすことができます

// StockHolding.m 
// Stocks 
// 
// Created by Eelco Plugge on 7/19/13. 
// Copyright (c) 2013 Eelco Plugge. All rights reserved. 
// 

#import "StockHolding.h" 

@implementation StockHolding 

@synthesize currentSharePrice, purchaseSharePrice, numberOfShares; 

- (float)costInDollars 
{ 
    // Cacluate costInDollar, purchaseSharePrice * numberOfShares 
    return purchaseSharePrice * numberOfShares; 
}; 

- (float)valueInDollars{ 
    // Calcuate valueInDollars, currentSharePrice * numberOfShares 
    return currentSharePrice * numberOfShares; 
}; 


@end 

希望。

よろしく、 Eelco

関連する問題