【问题标题】:"Not all code paths return a value"“并非所有代码路径都返回值”
【发布时间】:2011-12-17 16:59:04
【问题描述】:

我正在使用数组和方法。我正在编写一个代码来计算用户在数组中输入的数字的平均值。我想出了第一种方法,但 VS 告诉我“并非所有代码路径都返回一个值”。当我在 Main() 方法中测试代码时,它运行良好,但是当它在我的 GetValues() 方法中时,我得到了错误。

我阅读了所有其他帖子,但由于它们的特殊性,它们对我来说不太有意义。我知道这并不太难,但我是一个初学者,并试图自己理解这一点。

我的程序还没有完成,下面的代码只是我程序的第一部分(方法)。一旦 GetValues () 工作,想法就是从另一个计算平均值的方法调用这个方法。同样,GetValues() 应该捕获数组。

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace testscores
{
    class Program
    {
        static void Main(string[] args)
        {
        }

        private static int[] GetValues()
        {

            string inValue;
            int[] score = new int[5];
            int total = 0;

            for (int i = 0; i < score.Length; i++)
            {
                Console.Write("Enter Score {0}: ", i + 1);
                inValue = Console.ReadLine();
                score[i] = Convert.ToInt32(inValue);
            }

            for (int i = 0; i < score.Length; i++)
            {
                total += score[i];
            }
        }
    }
}

【问题讨论】:

    标签: c# methods


    【解决方案1】:

    您是否尝试返回整数数组score

       ....
            for (int i = 0; i < score.Length; i++)
            {
                total += score[i];
            }
            return score;
        }
    

    所以当你这样调用它时,你可以捕获这个数组

    int[] scores = GetValues();
    

    【讨论】:

    • 谢谢伙计,这正是我所做的。现在,如果我想从另一个方法调用该返回值。我应该在方法头中添加一个参数吗?如:private static int [] GetValues(int score)
    • @Oskar 不,这意味着您打算将一个 int 传递到您可以通过名称 score 访问的方法中......您不需要传递任何东西,而且您是创建一个名为 score 的本地数组
    • @kekekela 谢谢!因此,如果我想从另一个方法调用存储在 GetValues() 中的值,我应该只调用它从该方法中键入“GetValues”吗?希望我在解释自己
    • @Oskar 是的,碎纸机答案底部的代码 sn-p 是你会怎么做的,你的返回值保存在等号左侧的 score 变量中
    • @kekekela 太棒了.. 我现在明白了。你们太棒了,谢谢!
    【解决方案2】:

    编译器出错是因为需要添加return score

    除此之外,您还执行了一个循环来填充局部变量“total”,然后什么也不做,这看起来像是设计/逻辑错误。基本上,除非您将总计作为类的成员或输出参数而不是局部变量,否则可以删除该代码。您也可以在第一个循环中执行此操作。

    【讨论】:

    • 我相信你的意思是return score;
    • 返回分数[i];将返回一个 int,而不是 int[]
    • 还有+ 1与访问数组无关
    • @shredder 是的,我猜你在输入评论时把它编辑了
    • @Shredder,我相信 +1 在那里,所以用户不会看到他必须输入值 0。相反,这会将 1 添加到该初始值,因此它将显示为“输入分数 1"。我说的对吗?
    【解决方案3】:

    你的方法没有返回任何东西,也没有声明为 void,而是 int[]

    【讨论】:

      【解决方案4】:

      在函数 GetValues() 结束时,您需要返回一个 int[]。这是编译器错误告诉你的;如果您遵循 GetValues() 中的所有代码路径,则至少有一个不返回值。 (在函数末尾添加return score)。

      【讨论】:

      • 感谢苏根!我知道这一定很容易。我不再收到那个错误了。现在,这是否意味着我必须在方法头中写一个参数“int score”?即 private static int [] GetValues (int score)
      【解决方案5】:

      您的函数已声明为返回 int[],但其中没有单个 return 语句。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-08
        • 2013-10-06
        • 2016-02-14
        • 2014-04-02
        • 2019-05-26
        相关资源
        最近更新 更多