【问题标题】:how to generate for loop如何生成for循环
【发布时间】:2016-03-21 15:34:47
【问题描述】:

你好有一个非常简单的问题,我正在尝试用 C# 创建一个控制台程序,它可以从用户那里获得 3 个输入。开始、停止和步数。

它应该是一个 for 循环,但我真的不明白如何将用户输入放入 for 循环中,我尝试将用户输入设为 int,然后将 int 的名称放入 for 循环中,但它是给我错误。

该程序应该看起来像“Ovning 1”站点中的以下程序是瑞典语,但我希望你们能明白,尝试搜索该站点但从未给出解释。 http://csharpskolan.se/showarticle.php?id=119

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

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

        Console.WriteLine("Mata in Start");
        int startNummer = int.Parse(Console.ReadLine());

        Console.WriteLine("Mata in Stop");
        int stopNummer = int.Parse(Console.ReadLine());

        Console.WriteLine("Mata in Steg");
        int stegNummer = int.Parse(Console.ReadLine());


        for (int startNummer; startNummer >= stopNummer; startNummer + stegNummer) 
        {
            Console.WriteLine();


        }
    }
}
}

【问题讨论】:

  • 在你的 for 循环中,你有一个空行。你可以要求输入 - 然后用它做一些事情 - 你尝试了什么?
  • 空行是什么意思?不是 Console.WriteLine();应该吐出数字吗?我试过 Console.WriteLine(startNummer);仍然有错误。我认为这与 int 没有以某种方式连接到 for 循环有关,因为它的静态 void 但我对这些还没有那么有经验。
  • 为什么会这样?你说“Console.WriteLine();”它只是写出一个换行符..所以如果你有 200 行,你会得到 200 个换行符。如果你想让它打印一些东西,你需要告诉它什么。
  • 您希望打印什么?根据用户输入迭代的循环数?
  • 现在您可以看到 fubo 或 BviLLe_Kid 的答案,它应该会给您预期的结果 :)

标签: c# for-loop user-input


【解决方案1】:
static void Main(string[] args)
    {
        Console.WriteLine("Mata in Start");
        int startNummer = int.Parse(Console.ReadLine());

        Console.WriteLine("Mata in Stop");
        int stopNummer = int.Parse(Console.ReadLine());

        Console.WriteLine("Mata in Steg");
        int stegNummer = int.Parse(Console.ReadLine());


        for (int n = startNummer; n < stopNummer; n += stegNummer)
        {
            Console.Write(n + " ");
           Console.Write("{0} ", n); //(Alternative)
        }
    }

【讨论】:

  • n &gt;= stopNummer?或n &lt; stopNummer?
  • 好的..删除我的 -1 :)
  • BviLLe,而不是 Console.WriteLine() 应该是 Console.Write(n+" "); 请参阅 OP 参考页面
  • @JamesH 我已经编辑了我的帖子..这就是为什么我评论问他要打印什么..我想他可以告诉我们所有人而不必参考另一个页面
  • 好的,但仍然不准确。引用的页面告诉我们输出应该类似于12 14 16 18...所以它应该是Write,而不是WriteLine :)
【解决方案2】:

for 循环应该是这样的

for (int i = startNummer; i <= stopNummer; i += stegNummer) 
{
    Console.Write(i + " ");
}

您当前的代码中有 3 个错误:

for (int startNummer; startNummer >= stopNummer; startNummer + stegNummer) 
  • 你不能两次初始化一个变量int startNummer; - 这不会编译
  • 您的比较走向了错误的方向(除非您正在使用负步骤)startNummer &gt;= stopNummer
  • 你没有在这里分配计算的新步骤startNummer + stegNummer - 它应该是startNummer += stegNummerstartNummer = startNummer + stegNummer

【讨论】:

  • 这是正确的,虽然(这很挑剔)但使用变量 Temp 并不是一个好习惯。命名事物很困难,但真正可以阅读并确切知道其含义的事物是理想的。考虑到使用的母语,我建议currentNummercurrent 的任何翻译版本
  • 好吧@JamesH,我通常在for循环中使用i作为变量名。也许是因为我老了,以前是这样的;)
  • @Pikoh 我也这样做,但i 至少是大多数开发人员都能理解的通用约定。但是Temp 并没有真正告诉我任何事情,至少对于i,我知道它是用于数组的循环的索引。再说一次,我知道这很挑剔。 ;)
【解决方案3】:

大部分看起来还不错。但是有几件事没有意义,

for (int startNummer; startNummer >= stopNummer; startNummer + stegNummer);
{
        Console.WriteLine();
}

有一个分号';'在 for 循环结束时。这结束了 for 循环,使下一个花括号语法错误。 startNumber >= stopNumber 然后 startNumber + stegNumber 可能根本不运行它,或者根据输入运行无限循环。

这个for循环应该像下面这样吗?

for (int start = startNummer /*have to initialize the start value*/; 
     start < stopNummer; 
     start += stegNummer)
{
        Console.Write(start + " "); //need Console.Write to print all numbers on same line. Console.WriteLine puts each index on its own line
}

【讨论】:

  • startNummer + stegNummer 不正确。此外,正如其他 cmets 所述,startNummer 已在循环上方声明。
  • 确实! :( 应该把编译器放在前面 :D
  • 我发现我的大脑相当于 Fisher Price Baby 的 First Compiler ;)
猜你喜欢
  • 1970-01-01
  • 2021-01-14
  • 1970-01-01
  • 2017-08-16
  • 2021-12-29
  • 1970-01-01
  • 2011-10-25
  • 2015-04-01
  • 1970-01-01
相关资源
最近更新 更多