【问题标题】:Method Array First Odd Number方法数组第一个奇数
【发布时间】:2014-03-03 18:42:49
【问题描述】:

我被卡住了,我正在尝试编写一个代码来显示我的索引中的第一个正奇数。 由于某种原因,它没有这样做。它只显示我索引中的第一个数字。我究竟做错了什么。我是新人,所以如果你能帮助我,我非常感谢。另外,如果你能保持也很简单,谢谢。

static void Main(string[] args)
{
    int[] A = { -2, 5, -1, 9, -6, 23, 67, 1, -8, 7, -3, 90 };
    int index = FirstPosOddNum(A);
    if (index >= 0)
    {
        Console.WriteLine("The first Positive value is: {0}, In Index {1}",
            A[index], index);
    }
    else
    {
        Console.WriteLine("No positive odd value available.");
    }
    Console.ReadLine();
}
static int FirstPosOddNum(int[] array)
{
    for (int i = 0; i < array.Length; i++)
    {
        if ((array[i] % 2 == 1) || (array[i] % 2 == -1))
            return i;
    }
    return -1;
}

【问题讨论】:

  • 为我工作:“第一个正值是:5,在索引 1 中”
  • 顺便说一句,您的FirstPosOddNum 函数也会找到一个不符合您要求的奇数。
  • 提示如何解决这个问题:(negative odd number) % 2 == -1(positive odd number) % 2 == 1
  • 您确定您不认为Index 1 是“第一个”数字吗?
  • 请不要在问题标题中包含有关所用语言的信息,除非没有它就没有意义。标记用于此目的。

标签: c# arrays methods


【解决方案1】:

改变这个:

if ((array[i] % 2 == 1) || (array[i] % 2 == -1))

到这里:

if ((array[i] > 0) && (array[i] % 2 == 1))

你想找到第一个 positiveodd 数字,这正是 if 中的条件所说的。

【讨论】:

  • 我认为第一次检查并不是真正需要的,% 只会返回 1 用于正奇数。对于0 以下的任何内容,它将返回-1
  • @Habib 我很清楚这一点。除了你完全没有理由地让事情变得非常混乱。要求是积极的和奇怪的,所以在if 条件中这样说明。如果问题要求第一个正数和 偶数 数,则必须包括正数检查。
  • 可能是出于可读性的原因,但这只是一个额外的检查,我想这对于新开发人员来说会很好
【解决方案2】:

试试这个:

static void Main(string[] args)
    {
        int[] A = { -2, 5, -1, 9, -6, 23, 67, 1, -8, 7, -3, 90 };
        int index = FirstPosOddNum(A);
        if (index >= 0)
        {
            Console.WriteLine("The first Positive value is: {0}, In Index {1}",
                A[index], index);
        }
        else
        {
            Console.WriteLine("No positive odd value available.");
        }
        Console.ReadLine();
    }
    static int FirstPosOddNum(int[] array)
    {
        for (int i = 0; i < array.Length; i++)
        {
            if (array[i] % 2 == 1)
                return i;
        }
        return -1;
    }

你的一些 cmets 说,你需要从你的代码中删除你的 array[i] % 2 == -1

【讨论】:

  • 这不会改变输出 - 第一个奇数正数。
  • 是的,这是正确的答案。如果您尝试使用 int[] A = { -2, 6, -1, 9, -6, 23, 67, 1, -8, 7, -3, 90 },答案将是索引 3 中的 9。
【解决方案3】:

我编译并运行了您的代码。没有你描述的问题。它正在按照您的意愿工作:

显示我的索引中的第一个正奇数

也许您可以确定您 Rebuild-All 并正在运行您实际看到的代码。

另外,按照其他答案的建议进行更改。

【讨论】:

    【解决方案4】:

    你可以简单地说:

    static int FirstPosOddNum(int[] array)
    {
        int value = -1 ;
        for ( int i = 0; value < 0 && i < array.Length; ++i )
        {
          int x = array[i] ;
          if ( x > 0 && 0 != (x&1) ) value = x ;
        }
        return -1;
    }
    

    或者(甚至更简单):

    static int FirstPosOddNum(int[] array)
    {
        int v = array.FirstOrDefault( x => x > 0 && 0 != (x&1) ) ;
        return v > 0 ? v : -1 ;
    }
    

    【讨论】:

      猜你喜欢
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-25
      • 2020-07-17
      相关资源
      最近更新 更多