在2D数组中按价格搜索?

时间:2014-04-04 17:44:35

标签: c++

我有一个程序可以构建一个影院的2D阵列。用户可以按位置选择座位,并且货币金额改变为0以指示座位被占用。另一种选择座位的方法是按价格选择。因此,用户输入价格,for循环遍历数组并找到该价格的第一个实例并将其替换为0,然后停止。或者至少那是我试图做的事情。在实践中,它将所有这些值替换为0.我尝试使用while循环在条件满足后将其关闭,但这不起作用。这是我的(相关)代码。

while (flag == true)
    {
        cout << "\n";
        cout << "You may select tickets by seat or by price. Enter 1 to select by price, or 2 to select a seat. Enter 3 if you'd like to quit." << endl;
        cin >> userSelection;

        if (userSelection == 1)
        {
            cout << "What price would you like to search for? " << endl;
            cin >> priceSelection;
            while (searchFlag == true)
            {
                for (int i = 0; i < 9; i++)
                {
                    for (int j = 0; j < 10; j++)
                    {
                        if (Theater [i][j] == priceSelection)
                        {
                            Theater [i][j] = 0;
                            searchFlag = false;
                        }
                    }
                }

                for (int i = 0; i < 9; i++) // This for loop is going to output our array so the user can see pricing.
                {
                    for (int j = 0; j < 10; j++)
                    {
                        cout << Theater [i][j] << " ";
                    }
                    cout << "\n";
                }
            }

        }

我不确定真正需要改变的是什么,以便在找到并更改第一个价格后它会停止。另外,如果有必要,我不介意复制/粘贴我的其余代码。

3 个答案:

答案 0 :(得分:1)

对未来提出一些建议,

不要硬编码循环终止条件,即(i < 9)。拥有阵列的当前长度或座位数。这样你就可以添加更多,这仍然有效。

即使你在if语句中将search flag设置为false,你仍然会继续遍历每个for循环。因此,您每次都会遍历每个座位。如果当前座位的价格永远不会与用户输入的价格相匹配,那么您将进入无限循环。尝试将内部for循环更改为

for (int j = 0; j < someCurrentLengthOfArray && searchFlag; j++)

通过这种方式,您将检查价格是否匹配以及是否指向数组的未指定末尾。

正如其中一条评论中所提到的,为什么这是2D阵列?

答案 1 :(得分:0)

你的while循环在for循环之外,所以在你回到while循环之前所有的替换都完成了。如果您使用@DieterLücking建议并只使用一维数组,您可以使用一个while循环

int i =0;
while (searchFlag == true)
{
   // ..check for seats
   if (seatFound)
   {
      searchFlag = false;
   }
   i++;
}

对于2D数组,您仍然可以使用while循环方法,它只需要两个。

答案 2 :(得分:0)

更改你的for循环:

for (int i = 0; i < 9 && searchFlag; i++)
{
    for (int j = 0; j < 10 && searchFlag; j++)
    {
         if (Theater [i][j] == priceSelection)
         {
              Theater [i][j] = 0;
              searchFlag = false;
         }
     }
 }

他们现在的样子,不管怎么样,他们都会不停地反复,直到最后。如果你按照我上面的说明进行操作,当searchFlag设置为true时它们将会中断,然后拉回到外部while循环中,然后它将会中断。