【问题标题】:Cannot convert type 'String' To 'Int'?无法将类型“String”转换为“Int”?
【发布时间】:2013-11-01 17:04:46
【问题描述】:

好的,我被要求为剧院票务系统编写控制台应用程序。用户将输入所需的座位数量和选择的剧院区域(使用代码 1-4 表示选择的座位区域)程序应根据定价计算并显示门票成本如下图所示

Area            Code    price
Stalls           1      £24
Grand circle     2      £30
Upper circle     3      £27
Gallery          4      £20

到目前为止,我已经想出了以下内容,但是在 IF 语句部分下与 string + Int 转换有一个错误,这可能很容易修复,但我是编程新手,所以我'我不确定如何解决它:

//Declare variables and constants
int iSeatNum;
int iArea;
int iCost;
int iTotalCost;

//Ask the user how many seats they require
Console.WriteLine("How many seats would you like to purchase?");
iSeatNum = Convert.ToInt32(Console.ReadLine());

//Ask the user what area they would like to be in
Console.WriteLine("Where would you like to sit? Please enter 1 for Stalls, 2 for Grand Circle, 3 for Upper Circle or 4 for Gallery");
iArea = Convert.ToInt32(Console.ReadLine());

**if (iArea = "1")**
{
    iCost = 24;
}

//Clarify information & work out
Console.WriteLine("You are buying " + iSeatNum + " Seats at " + iArea);
iTotalCost = iSeatNum * iCost;
Console.WriteLine("Your total ticket cost is " + iTotalCost);

//Prevent from closing
Console.WriteLine("Press any key to close");
Console.ReadKey();

【问题讨论】:

    标签: c# string int


    【解决方案1】:
    if (iArea = "1")
    

    iArea 是一个整数,"1" 是一个字符串。所以你不能比较这两者。您应该与整数 1 进行比较。另请注意,单个等号 (=) 是一个分配,而不是比较。你会想在那里使用两个:==

    if (iArea == 1)
    

    现在它显示另一个错误,当我输入 iTotalCost = iSeatNum * iCost; 时,它出现“使用未分配的局部变量 iCost”的错误知道如何解决这个问题吗?

    问题是您在开始时声明变量iCost,但在使用它之前从未安全地为其分配任何值。当iArea 等于1 时,您确实 分配了一个值,但对于所有其他情况,变量保持未初始化状态。当然编译器不知道当程序运行进行测试时你最终会输入1,这无论如何都不是一件安全的事情。所以它需要你用任何东西来初始化你的变量。

    所以一开始你可以说int iCost = 0;来解决这个问题。

    【讨论】:

    • 非常感谢,我知道我现在哪里出错了,因为它们是关系运算符?我已经这样做了,但是现在当我输入“iTotalCost = iSeatNum * iCost;”时它显示了一个进一步的错误它出现了“使用未分配的局部变量 iCost”的错误知道如何解决这个问题吗?再次感谢
    • 太棒了,帮助很大!非常感谢,现在可以 100% 工作!
    【解决方案2】:

    "1"string,而不是 int

    if (iArea == 1)
    

    【讨论】:

      【解决方案3】:

      因为您已经使用以下方法将字符串(Console.ReadLine() 返回一个字符串)转换为数字:

      iArea = Convert.ToInt32(Console.ReadLine());
      

      您可以使用以下方法将其作为数字进行比较:

      if (iArea == 1)
      

      注意== 而不是=,单用于赋值,双用于比较。

      【讨论】:

        【解决方案4】:
        if (iArea = "1")
        

        这没有意义。首先,您使用的是赋值等于运算符。您正在尝试为iArea 分配"1" 的值。相反,您需要逻辑相等运算符==,它将根据第一个操作数是否等于第二个操作数返回真或假。

        其次,您已经将从控制台读取的字符串值转换为强类型整数。所以你需要编写你的 if 语句如下:

        if (iArea == 1)
        

        【讨论】:

          【解决方案5】:
          String strArea =Console.ReadLine();
          
                 if (strArea.Equals("1"))
                  {
                      iCost = 24;
                  }
          

          int iArea = Convert.ToInt32(Console.ReadLine());

                 if (iArea == 1))
                  {
                      iCost = 24;
                  }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-06-03
            • 1970-01-01
            • 2022-08-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多