首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从数组中提取-并不是所有代码路径都返回一个值。

问从数组中提取-并不是所有代码路径都返回一个值。
EN

Stack Overflow用户
提问于 2022-11-03 14:07:24
回答 2查看 63关注 0票数 0

我试着从数组中提取偶数。

我觉得我快明白了,但我不断地犯这个错误,不知道该怎么做。

(int[])':并非所有代码路径都返回值

我知道我需要一个返回值,但我不想返回任何东西,只想返回if语句中的值。

If语句的基本内容是:

代码语言:javascript
复制
if (arr[i] % 2 == 0)

这就是我在数组中得到均匀值的条件,这就是我想要的。

现在,根据我的研究,我需要归还一些明显的东西。但是我只想返回从if语句中得到的偶数值。我现在的代码是:

代码语言:javascript
复制
static int[] ExtractEvenNumber(int[] arr)
{
    
    for (int i = 0; i < arr.Length; i++)
    {
        if (arr[i] % 2 == 0)
        {
            Console.Write(arr[i] + " ");
        }               
        
    }
    
    // so I need a return value here? what do I return? 
    //I dont want to return arr; cause it'll just repeat the arr. 
}

编辑:

这就是我想得到的(粗体值):

-> 4 2 6

示例数组位于左侧。

我试图返回int[];

但这会给我带来更多的错误?

在这里输入图像描述

问题已经解决了。谢谢大家!)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-11-03 14:41:42

看起来,您应该使用不需要Linq甚至List<T>的低级别代码来实现这一点。

您可以使用just循环和使用以下算法的结果数组来完成这一任务:

  1. 确定返回数组中将有多少个数字。您可以通过循环输入数组和计数偶数数来做到这一点。您需要知道这一点,因为您希望创建一个大小正确的数组来保存所有结果。
  2. 创建一个大小为您刚才计算的结果数组。
  3. 再次循环输入,这次将每个偶数添加到结果数组中。您可以使用一个计数器(一个整数变量)作为一个索引,在将每个偶数添加到结果之后,您可以增加该索引,这样您就可以知道每个新的数字在结果数组中的位置。
  4. 最后,可以返回结果数组。

下面是一个示例实现-仔细阅读代码,以确保您理解每一步。

代码语言:javascript
复制
static int[] ExtractEvenNumber(int[] arr)
{
    // (1) Count how many even numbers there are.

    int n = 0;

    foreach (int number in arr) 
    {
        if (number % 2 == 0)
        {
            ++n;
        }
    }

    // (2) Create a result array of the correct size.

    int[] result = new int[n];

    // (3) Copy into the array all the even numbers.
    // Here we use i to index where the next even number should go in the results.

    int i = 0;

    foreach (int number in arr)
    {
        if (number % 2 == 0)
        {
            result[i] = number;
            ++i; // Next even number will go into the next result element.
        }
    }

    // (4) Return the results;

    return result;
}
票数 1
EN

Stack Overflow用户

发布于 2022-11-03 14:19:58

您在注释中说,您不能删除static int[] ExtractEvenNumber(int[] arr),因为它是分配中的默认代码,因此您必须返回一个int[]。如果没有找到任何东西,它可以是一个空数组。在C#中,您不能向int[]对象添加元素,因为不能更改它们的长度,因此我建议您使用List来临时存储找到的存储号,然后在返回结果之前将其转换为int[]:

代码语言:javascript
复制
    static int[] ExtractEvenNumber(int[] arr)
    {
        List<int> result = new();
        
        for (int i = 0; i < arr.Length; i++)
        {
            if (arr[i] % 2 == 0)
            {
                result.Add(arr[i]);
                Console.Write(arr[i] + " "); // Optional
            }

        }
        
        return result.ToArray();
    }

您还可以使用foreach对数组进行迭代,因为您不需要数字的索引,而只需要值。如果你是编码新手,我认为这是最容易理解的:

代码语言:javascript
复制
static int[] ExtractEvenNumber(int[] arr)
    {
        List<int> result = new();

        foreach (int number in arr)
        {
            if (number % 2 == 0)
            {
                result.Add(number);
                Console.Write(number + " "); // Optional
            }

        }

        return result.ToArray();
    }

更简单,您可以使用.Where

代码语言:javascript
复制
static int[] ExtractEvenNumber(int[] arr)
    {
        return arr.Where(number => number % 2 == 0).ToArray();
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74304449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档