【问题标题】:Negative value not being added to Array未将负值添加到数组
【发布时间】:2016-11-05 22:41:48
【问题描述】:

问题

我有 2 个数组,一个用于正数,一个用于负数。由于某种原因,如果要添加的第一个数字是负数,它会创建数组空间来添加数字,但插入的数字将始终为 0。

添加代码

这是我的 add 方法,它确定值是负数还是正数,并将值添加到适当的数组中:

bool MyClass::addInt(int valueToBeInserted){

 if (valueToBeInserted >= 0){
    if (posArrayIterator >= sizeOfMyArray){
      return false;
    } else {
      cout << "added " <<  valueToBeInserted << "\n" << endl;
      myPArray[posArrayIterator] = valueToBeInserted;
      posArrayIterator ++;
      return true;
    } 
  } else {
    if (negArrayIterator >= sizeOfMyArray){
      return false;
    } else {
      cout << "added " <<  valueToBeInserted << "\n" << endl;
      myNarray[negArrayIterator] = valueToBeInserted;
      negArrayIterator ++;
      return true;
    }
  }

}

输出

通过以下测试:

b.addInt(-1);
b.addInt(-3);
b.addInt(-9);

预期的输出是

[-1, -3, -9] 

但输出是

[-3, -9, 0].

非常感谢任何帮助。

【问题讨论】:

  • 建议:尽量避免使用全局变量。
  • 调试器是解决此类问题的正确工具。 询问 Stack Overflow 之前,您应该逐行逐行检查您的代码。如需更多帮助,请阅读How to debug small programs (by Eric Lippert)。至少,您应该 [编辑] 您的问题,以包含一个重现您的问题的 Minimal, Complete, and Verifiable 示例,以及您在调试器中所做的观察。
  • 我相信这个错误不在提供的代码中。

标签: c++ arrays class if-statement


【解决方案1】:

由于你没有发布整个班级,我只能猜测问题出在哪里。

1) posArrayIteratornegArrayIterator 是否初始化为 0?他们应该是!

2) sizeOfMyArray 的值是多少?

你的bool MyClass::addInt(int valueToBeInserted)没有问题

请看下面的例子:

class  MyClass
{
 private:
 int sizeOfMyArray;
 int posArrayIterator;
 int negArrayIterator;
 int myNarray[20];
 int myPArray[20];    

 public:
 MyClass(){
     sizeOfMyArray = 20;
     posArrayIterator = 0;
     negArrayIterator = 0;
  };

 bool addInt(int value); 
 void printNArray()
 {
   cout << "[ ";
   for (int i=0; i<negArrayIterator; i++)
   {
     cout << myNarray[i];
     if ( (i+1) < negArrayIterator ) 
     {
         cout << ", "; 
     }
   }
   cout << "]";
 }
};

 bool MyClass::addInt(int valueToBeInserted){

 if (valueToBeInserted >= 0){
    if (posArrayIterator >= sizeOfMyArray){
      return false;
    } else {
      cout << "added " <<  valueToBeInserted << "\n" << endl;
      myPArray[posArrayIterator] = valueToBeInserted;
      posArrayIterator ++;
      return true;
    } 
 } else {
        if (negArrayIterator >= sizeOfMyArray){
            return false;
        }
        else {
           cout << "added " <<  valueToBeInserted << "\n" << endl;
           myNarray[negArrayIterator] = valueToBeInserted;
           negArrayIterator ++;
           return true;
      }
 }
}

int main()
 {
  MyClass b;
  b.addInt(-1);
  b.addInt(-3);
  b.addInt(-9);
  b.printNArray();
  return 0;
 }

输出:

added -1

added -3

added -9

[ -1, -3, -9]

【讨论】:

  • posArrayIterator 和 negArrayIterator 在构造函数中都初始化为 0。另外 sizeOfMyArray 在构造函数中设置为 20,它是数组大小的固定常量
  • @TerribleCoderSad 请发布整个课程,我会帮助你。
  • @TerribleCoderSad 我的例子有帮助吗?您需要更多帮助吗?
  • 我的操作方法原来是问题
  • @TerribleCoderSad 很高兴您发现了问题。如果我的回答有用,您可以通过单击向上箭头将其标记为有用。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-13
  • 1970-01-01
  • 2012-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多