【问题标题】:How to match two arrays to corresponding user input?如何将两个数组与相应的用户输入匹配?
【发布时间】:2013-11-10 21:34:45
【问题描述】:

当我运行代码时,最终输出是 204 号公寓的租金是 $System.Int32[]。我的问题的重点是getRent 方法。当我进入代码时,for 循环函数会找到用户输入apartmentNumber,然后遍历公寓数组以匹配索引。所以当它转到printit 方法时,它仍然显示用户输入apartmentNumber

如何匹配对应的租金指数?

static void Main(string[] args)
{
    int[] apartment = { 123, 204, 601, 609, 612 }; // initialize apartment array
    int[] rent = {500, 750, 495, 800, 940 }; // intitialize rent array
    int apartmentNumber = 0; // declare apartmentNumber int

    getRent (apartment , rent, apartmentNumber ); /*pass the apartment and rent 
    array by ref and apartment number console entry */

    Console.WriteLine("Press any key to continue..."); // Lets user know program over
    Console.ReadKey(); // keeps the program from closing quickly after executing
}

static void getRent(int [] apartment, int [] rent, int apartmentNumber) //method getRent
{ 
    Console.WriteLine ("Enter apartment number"); // query user to enter apartment number
    apartmentNumber = int.Parse (Console.ReadLine ()); // convert apartment number to int

    for (int i = 0; i < apartment.Length - 1; i++) // for loop to match apartmentNumber

    if (apartment[i] == apartmentNumber)// match it to apartment array


    Console.WriteLine(); // space between user input and output
    printit(apartmentNumber, rent);
}

static void printit (int apartmentNumber, int [] rent) // static method printit 
{
    string string1 = "Rent for apartment #" + apartmentNumber;
    string string2 = " is $" + rent;

    StringBuilder mystring = new StringBuilder();

    mystring.Append(string1);
    mystring.Append(string2);
    Console.WriteLine(mystring); 
}

【问题讨论】:

  • 这样的配对数组,其中匹配索引对应于单个元素的属性,几乎总是一个糟糕的设计。相反,编写一个类来保存公寓号码并作为该类的成员出租。

标签: c# arrays for-loop


【解决方案1】:

基本上,您的getRent 方法所做的只是将调用转发到printit 方法。 请注意,getRent 中的 printit 调用既不是 if 代码块的一部分,也不是 for 代码块的一部分。

此外,您希望在方法printit 中的string2 变量中存储什么?您将 + 运算符与字符串和数组一起使用。如果这是 C#,rent 数组的字符串表示将连接到“is $”。

编辑: 这就是您需要的:以下语句中的指令块:

if (apartment[i] == apartmentNumber)// match it to apartment array

应该如下:

{
    int apartmentRent = rent[i];
    System.out.println("Rent for apartment # " + apartmentNumber + "is $ " + apartmentRent);
}

有效吗?

【讨论】:

  • @Andrei,我要做的是在 printit 方法中获取租金以对应匹配索引。所以如果用户输入的公寓号码是 609,租金应该显示 800
  • 我明白了。你没有做你应该做的事情:D 你对用户输入表单所做的只是在apartment 数组中的元素等于用户输入时打印一个新行。请参阅我编辑的答案以获取我会执行您正在执行的操作的代码的 sn-p。
【解决方案2】:

您的for 循环和if 语句没有使用方括号。

所以这段代码:

for (int i = 0; i < apartment.Length - 1; i++) // for loop to match apartmentNumber

if (apartment[i] == apartmentNumber)// match it to apartment array

Console.WriteLine(); // space between user input and output
printit(apartmentNumber, rent);

实际上是这样做的:

for (int i = 0; i < apartment.Length - 1; i++) // for loop to match apartmentNumber
{
    if (apartment[i] == apartmentNumber)// match it to apartment array
    {
        Console.WriteLine(); // space between user input and output
    }
}
printit(apartmentNumber, rent);

所以你可以看到对printit的调用在循环和if语句之外。

即使对于单个语句,也最好使用括号:

  1. 这样更容易发现此类问题。
  2. 它可以更轻松地将代码添加到循环中的正确位置以及您以后需要的 if 语句。

您的 printit 函数也将 rent 作为一个数组,而它可能只是一个 int(尽管您应该在这里使用浮点类型):

static void printit (int apartmentNumber, int rent)
{
     ....
}

那么方法的主体就有意义了。

然后对它的调用变成:

printit(apartmentNumber, rent[i]);

因为那将在循环内。

【讨论】:

  • 这是关于 printit 方法的一个好点。我没有考虑将租金作为浮点或整数类型。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 2021-01-01
  • 1970-01-01
相关资源
最近更新 更多