我的 C# 循环存在问题

本文关键字:问题 存在 循环 我的 | 更新日期: 2023-09-27 18:30:27

我正在制作一个收银系统,它收集您放入的物品数量,然后它会要求您输入每件物品的价格(取决于您输入的物品数量)。

我有一个循环,它应该从数组中获取数字并将它们添加到总变量中,我想,请帮忙!

法典:

private void runtotal()
{
    for(int i = 0; i > numbers.Length; i++)
    {
        total = total + numbers[i];
    }
}

数字 = 存储价格的数组总计 = 加在一起的价格应该在这里。

任何帮助表示赞赏!

我的 C# 循环存在问题

这个

 for(int i = 0; i > numbers.Length; i++)

应该改成这个

 for(int i = 0; i < numbers.Length; i++)

numbers是一个数组,它有一个 Length 属性,即数组中存储的项目数。第一项存储在位置 0 中,最后一项存储在位置 numbers.Length-1 中。所以这个条件,i > numbers.Length没有意义。

此外,您必须考虑什么是for状态。

如果要多次重复某个操作,可以使用 for 语句。

通常,for语句都有一个循环变量,用于监视循环。它从一个值开始,以另一个值结束(通常)。除此之外,每一步都会检查一个条件。如果这是真的,该步骤将被执行,否则我们到达for状态的末尾。顺便说一下,永无止境的循环,例如for(;;),但在这种情况下,这不是您关心的问题。

在这种情况下,变量为 i 。起始值为 0,您在每一步中检查的条件是这个i > numbers.Length。显然,这种情况是false的,不会执行任何步骤。

有关完整的参考,关于for声明,请查看此处。

作为旁注,关于您的方法的一些评论。假设numbers是一系列int我建议您重构方法,如下所示:

private int Sum(int[] numbers)
{
    int sum = 0;
    for(int i = 0; i < numbers.Length; i++)
    {
        sum = sum + numbers[i];
    }
    return sum;
}

将此方法与初始方法进行比较。

  • 它有一个比初始方法更清晰的名称(以大写字母开头,这是通常的约定)。
  • 将整数数组作为参数传递。(所以你有一个特定的输入,你期望一个特定的输出,这些整数的总和)
  • 总和是此方法的局部变量。没有任何理由将这样的计数器作为类级别字段。
  • 此方法现在可以在您想要的任何地方用于计算存储在整数数组中的整数的总和,而不是作为特定类的数组。 当然,要这样做,您必须将其放在另一个类中并使其公开。但是,我认为你明白了重点。(但是,如果总和太大,整数溢出,您必须注意。但这是一般的想法)。

问题是for循环中的条件必须有效才能执行另一个循环。由于您的条件是:

i > numbers.Length

并且i初始化为 0 并且长度大于或等于 0第一次运行时将false条件,因此for循环将永远不会运行。

您可以使用其他条件来解决它:

i < numbers.Length

福里奇

C#(和许多其他编程语言)有一个称为foreach循环的概念:如果数据结构影响IEnumerable<T>接口(数组这样做),则可以使用如下foreach

foreach(int number in numbers) {
    total += number;
}

这更安全,并显示更多您正在做的事情:对于numbers中的每个number,您将数字添加到total

声明性方法

尽管如此,最好

使用更具声明性的方法。可以使用 LINQ Sum扩展方法:

using System.Linq;
//...
private void runtotal() {
    total = numbers.Sum();
    //do something with total
}

不使用任何for循环。使用内置通常更好,因为它倾向于让您的代码显示您想要计算的内容,而不是您如何做到这一点,此外,这些内置不太可能包含错误,最后在某些情况下它们非常优化,因此将优于天真的方法。