gpt4 book ai didi

C# 对象引用未设置到对象?

转载 作者:行者123 更新时间:2023-11-30 18:51:50 28 4
gpt4 key购买 nike

enter image description here

public static void duel(String user, String user1, String user2)
{
int[] value = null;
String winner;
for (int i = 0; i < 2; i++)
{
Random rand = new Random((int)DateTime.Now.Ticks);
int numIterations = 0;
numIterations = rand.Next(2, 12);
value[i] = numIterations;//This is line 286
}
if (value[0] > value[1])
{
winner = user1;
}
else
{
winner = user2;
}
Console.WriteLine(user + " Started a duel against " + user1 + " and " + user2 + "!");
Console.WriteLine(user1 + " rolled " + value[0] + " and " + user2 + " rolled " + value[1] + "!");
Console.WriteLine(winner + " is the winner!");
}

这里到底出了什么问题?当我设置 int[] value = null 它编译但如果我删除 null 它说 Use of unassigned local variable 'value' Line 286

最佳答案

是的,您必须在使用它之前为 value 变量分配一个值 - 但是当您将它设置为 null 时,您得到一个 NullReferenceException 当您尝试使用它时。看起来你想要一个二元素数组,所以使用

int[] value = new int[2];

但是,使用您编写的代码,您几乎肯定会以相同的两个值结束,因为您正在 处创建两个 Random 实例,几乎完全相同同时。看我的article on Random获取更多信息。

我会将一个 Random 实例传递给该方法,然后像这样重写它 - 没有有点毫无意义的循环:

public static void Duel(Random rng, String user, String user1, String user2)
{
// Using Next(2, 12) doesn't really mimic 2 dice of 1-6; it actually mimics
// a single 10-sided die with values 2 to 11 inclusive.
int score1 = rng.Next(1, 7) + rng.Next(1, 7);
int score2 = rng.Next(1, 7) + rng.Next(1, 7);

// Note: this is biased in favour of user2 in case of equality
string winner = score1 > score2 ? user1 : user2;

Console.WriteLine("{0} started a duel between {0} and {1}!",
user, user1, user2);
Console.WriteLine("{0} rolled {1} and {2} rolled {3}!", user1, score1,
user2, score2);
Console.WriteLine("{0} is the winner!", winner);
}

这里需要注意的事项:

  • 我们的方法依赖于它自己不一定能正确创建的东西(Random),所以它被注入(inject)了。
  • 通过掷两个单个骰子来模拟掷两个骰子(这是我假设的目标),而不是在 [2, 12] 范围内统一选择一个数字。
  • Random.Next 的第二个参数是一个独有的上限(我在检查之前弄错了)
  • 使用条件运算符,当您想根据条件选择一个或另一个表达式,并用两种方式对结果做同样的事情
  • 使用composite format strings使格式化字符串比简单的连接更容易
  • 遵循 .NET 命名约定(Duel,而非duel)

关于C# 对象引用未设置到对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8190331/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com