Dice roll控制台应用程序返回C#

时间:2017-04-02 23:26:07

标签: c# string if-statement dice

我正在尝试编写一个控制台应用程序,它使用多种类型的骰子进行dicerolls,并在完成后,要求用户确认新的滚动或退出。

以下是显示问题的最小部分:

string rolltype = "bob";
if (rolltype = "d4") // <-- error on this line
{
    Console.WriteLine("d4 roll is {0}", d4);
}

代码在编译时产生以下错误:

  

无法将类型字符串隐式转换为bool

完整来源:

namespace diceroll
{
    class Program
    {
        static void Main(string[] args)
        {
            Random rand = new Random();
            int d4 = rand.Next(1, 5);
            int d6 = rand.Next(1, 7);
            int d8 = rand.Next(1, 9);
            int d10 = rand.Next(1, 11);
            int d12 = rand.Next(1, 13);
            int d20 = rand.Next(1, 21);
            string rolltype;
            Console.WriteLine("what do you want to roll?");
            rolltype = (Console.ReadLine());
            Console.WriteLine("your choice is {0}", rolltype);
            if (rolltype = "d4")
            {
                Console.WriteLine("d4 roll is {0}", d4);
            }
            else { }
            Console.ReadKey();
        }
    }
}

我希望在这里实现的是控制台询问滚动的类型,并且在给出时,它会返回一个随机数。 (rolltype =“d4”)返回错误“无法将类型字符串隐式转换为bool”。

2 个答案:

答案 0 :(得分:2)

  

“不能隐式将类型字符串转换为bool”,我不知道   如何解决它

这是因为下面的代码不会产生布尔值,低于你试图将rolltype分配给字符串"d4"因此错误。

if (rolltype = "d4")

你想要的是这个:

if (rolltype == "d4")
  

还有一种比写作更优雅的方式   为rolltypes分隔if语句?

当然,我们可以使用数组存储可能的选项,然后循环遍历它。

第1步 - 创建数组:

string[] myArray = {"d4","d6","d8","d10","d12","d20"};

现在你的代码变成了这样:

Random rand = new Random();
int d4 = rand.Next(1, 5);
int d6 = rand.Next(1, 7);
int d8 = rand.Next(1, 9);
int d10 = rand.Next(1, 11);
int d12 = rand.Next(1, 13);
int d20 = rand.Next(1, 21);
string[] myArray = {"d4","d6","d8","d10","d12","d20"};

步骤2 - 循环遍历它以查找输入的值是否等于数组中的任何值。

foreach(string str in myArray){
   if (rolltype == str){
      // do something
      break; // if we get here then we don't need to loop any further
   }
}

现在你的代码变成了这样:

Random rand = new Random();
int d4 = rand.Next(1, 5);
int d6 = rand.Next(1, 7);
int d8 = rand.Next(1, 9);
int d10 = rand.Next(1, 11);
int d12 = rand.Next(1, 13);
int d20 = rand.Next(1, 21);
string[] myArray = {"d4","d6","d8","d10","d12","d20"};
string rolltype;
Console.WriteLine("what do you want to roll?");
rolltype = (Console.ReadLine());
Console.WriteLine("your choice is {0}", rolltype);

foreach(string str in myArray){
    if (rolltype == str){
          // do something
        break; // if we get here then we don't need to loop any further
    }
}

评论中Chris建议的另一个好方法是简单地从字符串中取出数字。这显然会减少您目前拥有的rand.Next()数量。

示例:

int dieType = int.Parse(rollType.Substring(1)); 
int result = rand.Next(1,dieType+1);

答案 1 :(得分:0)

 if (rolltype == "d4")

您需要使用相等运算符而不是赋值运算符。