【问题标题】:Use an operator between an array and an int [closed]在数组和 int 之间使用运算符 [关闭]
【发布时间】:2016-08-28 14:47:51
【问题描述】:

我需要创建一个循环来显示所有素数,直到某个数字。该号码将由用户自己输入。所以我想创建一个while循环来显示消息。只有我不能在数组和整数之间使用运算符“

int[] Prime = {2, 3, 5, 7, 11};

    private void btnCalculate_Click(object sender, EventArgs e)
    {
        int OutputPrime = 0;
        while (Prime < biggestPrime)
        {

        }
    }

这在 while 行给了我以下错误: 运算符“

非常感谢任何帮助。 提前致谢!

【问题讨论】:

  • 两个字,算子重载
  • @NullException 你不能重载一个可以让你比较intint[]的运算符,即使你可以这样做,你也不想这样做。
  • 您应该使用带有数字索引的int[],例如Prime[0] &lt; BiggestPrime
  • biggestPrime 大于集合{2, 3, 5, 7, 11}} 是什么意思?您比较两个数字,但您不比较数字的序列。您需要考虑在执行此检查时实际上想要发生什么(用简单的英语,而不是数学)。
  • 简单来说,您不能这样做,因为您的循环不知道您正在访问数组中的哪个项目,也不知道访问的顺序。您可能需要使用 foreach 或 for 循环,并按顺序访问项目,将每个项目与最大的Prime 进行比较以检查它们是否更大。

标签: c# arrays int operator-keyword


【解决方案1】:

Prime 是一个数组类型,它包含一些整数,因此您必须使用它的索引号访问它的值,但是您试图直接访问 Prime,它是一个数组而不是整数,因此请与整数类型 @987654323 进行比较@抛出异常可以这样实现

int[] Prime = {2, 3, 5, 7, 11};

private void btnCalculate_Click(object sender, EventArgs e)
    {

        int OutputPrime = 0;
        for (int i = 0; i < Prime.Length; i++)
        {
            if (Prime[i] < biggestPrime)
            {
                // do your stuff
            }
        }
    }

【讨论】:

  • 应该是Prime[i]
  • 这是一个真的坏主意,因为您在已经很昂贵的操作的每次迭代中都在做大量不必要的工作。
  • 为什么要在事件处理程序中再次初始化数组?
【解决方案2】:

Linq 是你的朋友。

foreach (var prime in primes.TakeWhile(i => i <= biggestPrime))
{
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-05
    • 2014-08-06
    • 2015-08-19
    • 2015-07-16
    • 2011-04-23
    • 2020-08-01
    • 2018-10-26
    • 1970-01-01
    相关资源
    最近更新 更多