黑马程序员技术交流社区

标题: 学生每学习一次,各科成绩就会+1,这题咋做? [打印本页]

作者: chaoren    时间: 2015-3-12 16:40
标题: 学生每学习一次,各科成绩就会+1,这题咋做?
  1. #import <Foundation/Foundation.h>
  2. @interface Score : NSObject
  3. {
  4.     int _cScore;
  5.     int _ocScore;
  6.     int _iOSScore;
  7. }
  8. - (void)setCScore:(int)newCScore;
  9. - (int)cScore;
  10. - (int)ocScore;
  11. - (int)iOSScore;
  12. - (void)setOcScore:(int)newOcScore;
  13. - (void)setIosScore:(int)newIosScore;
  14. - (void)addScore:(Score *)Xscore add :(int) num;
  15. @end
  16. //score方法实现
  17. @implementation Score
  18. - (void)setCScore:(int)newCScore
  19. {
  20.     _cScore = newCScore;
  21.     NSLog(@"已经给c成绩赋值_cScore:%d",_cScore);
  22. }
  23. - (int)cScore
  24. {
  25.     return _cScore;
  26. }
  27. - (int)ocScore
  28. {
  29.     return _ocScore;
  30. }
  31. - (int)iOSScore
  32. {
  33.     return _iOSScore;
  34. }
  35. - (void)setOcScore:(int)newOcScore
  36. {
  37.     _ocScore = newOcScore;
  38.     NSLog(@"已经给oc成绩赋值:_ocscore=%d",_ocScore);
  39. }
  40. - (void)setIosScore:(int)newIosScore
  41. {
  42.     _iOSScore = newIosScore;
  43.     NSLog(@"已经给ios成绩赋值:_iOSScore=%d",_iOSScore);
  44.    
  45. }
  46. <font color="#ff0000">- (void)addScore:(Score *)Xscore add :(int) num
  47. {
  48.         switch (Xscore) {
  49.             case cscore:
  50.                 _cScore += num;
  51.                 break;
  52.             case ocscore:
  53.                 _ocScore += num;
  54.                 break;
  55.             case iosscore:
  56.                 _iOSScore += num;
  57.                 break;
  58.             default:
  59.                 break;
  60.         }</font>
  61. }
  62. @end
  63. @interface Student : NSObject
  64. {
  65.     Score  *_score;//成绩。组合
  66. }
  67. - (void)setScore:(Score *)newScore;
  68. - (Score *)score;

  69. - (void)study;//每学习一次,3可成绩各加1分,输出学习完后的3科成绩
  70. @end
  71. //学生类的方法实现
  72. @implementation Student
  73. - (void)setScore:(Score *)newScore
  74. {
  75.     _score = newScore;//给成绩赋值
  76.     NSLog(@"现在给score赋值:cscore:%d-ocscore:%d-iosscore:%d",[_score cScore],[_score ocScore],[_score iOSScore]);
  77.    
  78. }
  79. - (Score *)score//返回成绩
  80. {
  81.     return _score;
  82. }

  83. - (void)study//每学习一次,3可成绩各加1分,输出学习完后的3科成绩
  84. {
  85.     NSLog(@"现在c语言成绩:%d,+1",[_score cScore]);
  86. <font color="#ff0000">    [_score addScore:cscore  add :1];</font>
  87.     NSLog(@"现在oc成绩:%d,+1",[_score ocScore]);
  88. <font color="#ff0000">    [_score addScore:ocscore add :1];</font>
  89.     NSLog(@"现在ios成绩:%d,+1",[_score iOSScore]);
  90. <font color="#ff0000">    [_score addScore:iosscore add :1];</font>
  91.     NSLog(@"学习完,三科成绩为:_cScore=%d,_ocScore=%d,_iOSScore=%d",[_score cScore],[_score ocScore],[_score iOSScore]);
  92.    
  93. }
  94. @end
  95. int main()
  96. {
  97.     Student *stu = [Student new];
  98.     Score *s = [Score new];
  99.     [s setCScore:80];
  100.     [s setOcScore:79];
  101.     [s setIosScore:91];
  102.     [stu setScore:s];
  103.     [stu study];

  104.     return 0;
  105. }
复制代码
我想用同一个方法实现分别对三门功课成绩+1对操作,想传一个分数名称过去,请问我该咋写?

作者: 岳挺    时间: 2015-3-12 17:09
study方法里面不是已经实现了吗?每次调用study方法一次就会各科成绩加1,你就是这个意思吧
作者: hastar    时间: 2015-3-12 18:28
没理解你的问题
作者: TRY!    时间: 2015-3-12 18:51
    +_+  ~~~
作者: chaoren    时间: 2015-3-12 20:01
岳挺 发表于 2015-3-12 17:09
study方法里面不是已经实现了吗?每次调用study方法一次就会各科成绩加1,你就是这个意思吧 ...

但是我的代码报错
作者: xiezhongmin    时间: 2015-3-14 19:00
switch (Xscore) {

            case cscore:

                _cScore += num;

                break;

            case ocscore:

                _ocScore += num;

                break;

            case iosscore:

                _iOSScore += num;

                break;

            default:

                break;

你不觉得这段代码有问题吗,你switch指针干嘛?,三课成绩都加num干嘛要写swich整的这么复杂也不需要在score类写这个方法,直接在学生类的学习方法里写把传进来的(score *)newscore    _scroe .哪课的成员变量+=_scroe .哪课的成员变量;然后输出就可以了

作者: xiezhongmin    时间: 2015-3-14 19:02
是 _scroe .哪课的成员变量++;
作者: xiezhongmin    时间: 2015-3-14 19:20
你又在学生学习方法里调用[_score addScore:cscore  add :1],这个cscore是对象吗是指针吗,这是基本数据类型,接口类型不匹配。如果你非要扔掉面向对象的思想,绕一大圈的话,“-(void)addScore:(Score *)Xscore add :(int) num”你这个方法提供的接口应该是基本数据类型各科的分数成员变量





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2