【问题标题】:Very basic numerical comparison program非常基本的数值比较程序
【发布时间】:2010-10-20 18:38:34
【问题描述】:

由于某种原因,我无法理解以下程序的逻辑:

  1. 接受数字列表
  2. 遍历它们(通过 for each 循环)以找到最少的数字
  3. 通过 writeline 显示最少的数字

如果 minimumNumber 必须初始化为 0,那么 minimumNumber 不总是为 0 吗? (我提供了一个包含各种整数列表的基本 txt 文件,这就是 TwoNumbers.txt)


string[] lines = File.ReadAllLines ( "TwoNumbers.txt" );

 int leastNumber = 999;
 int previousNumber = 0;

 foreach (string line in lines)
 {
   int currentNumber = int.Parse ( line );
   currentNumber = leastNumber;
   if (currentNumber < previousNumber)
   {
     leastNumber = currentNumber;
   }
 }

 Console.WriteLine ("The least number is: " + leastNumber);
 Console.ReadLine ();

【问题讨论】:

  • 问题出在哪里,您的问题到底是什么?
  • 这是您无法理解的“功能”,这是正确的。

标签: c# loops foreach for-loop


【解决方案1】:

在您的程序中,您将覆盖当前数字:

int currentNumber = int.Parse ( line );
currentNumber = leastNumber;

第二行将导致当前数字在第一次迭代中为 999,这将导致在您检查后将 minimumNumber 设置为 0。

在那之后,currentNumber 将始终设置为 0,并保持不变。

您根本不需要以前的号码。做吧:

string[] lines = File.ReadAllLines ( "TwoNumbers.txt" );

int leastNumber = int.MaxValue;

foreach (string line in lines)
 {
   int currentNumber = int.Parse ( line );
   if (currentNumber < leastNumber)
   {
     leastNumber = currentNumber;
   }
 }

 Console.WriteLine ("The least number is: " + leastNumber);
 Console.ReadLine ();

【讨论】:

  • 谢谢,里德。这正是我疲惫的大脑刚刚向我展示的解决方案。
【解决方案2】:

试试这个:

string[] lines = File.ReadAllLines("TwoNumbers.txt");

int leastNumber = int.MaxValue;

foreach (string line in lines)
{
    int currentNumber = int.Parse(line);

    if (currentNumber < leastNumber)
    {
        leastNumber = currentNumber;
    }
}

Console.WriteLine("The least number is: " + leastNumber);
Console.ReadLine();

【讨论】:

  • 谢谢彼得。在我复查前几分钟,我疲惫的老大脑就发现了这个问题。
【解决方案3】:

你的问题在于比较。

您正在比较 currentNumber &lt; previousNumber,但 previousNumber 始终等于 0,因为您尚未为其分配任何内容。

【讨论】:

    【解决方案4】:

    有小于 0 的负整数。是否有任何东西阻止负整数出现在您的文本文件中?

    【讨论】:

    • 好点。不,我的列表中只有正整数。谢谢!
    【解决方案5】:

    如果您假设字符串 int 列表只是因为您的测试方法(使用文本文件来保存您的测试数据)并将其提炼到手头的问题,这似乎是在寻找最小整数值设置,您可以使用 LINQ 为您执行此操作:

    int[] listOfPositiveInts = new int[]{2,3,4,5,1,67};
    var minInt = listOfPositiveInts.Min();
    Console.WriteLine(minInt);
    

    如果您的业务问题是转换一个包含表示数字的字符串的文本文件,您应该进一步加强您的解决方案。

    如果你想理解算法,那么你应该尝试用伪代码思考

    create variable to track current lowest number 
    initialize tracking Variable to the first number in my array
    loop through the array of numbers to inspect
    if the number I'm inspecting is lower than my current lowest number
        replace my current lowest number with the number I'm inspecting
    end loop
    Display lowest value found
    

    使用 foreach 循环时看起来像这样

    // test data
    int[] arrayOfNumbers= new int[]{2,3,4,5,1,67};
    
    // search algorithm
    int lowestValueFound = arrayOfNumbers[0];
    foreach(int i in arrayOfNumbers)
    {
         if (i < lowestValueFound)
             lowestValueFound = i;
    }
    Console.WriteLine("Lowest value found is {0}", lowestValueFound);
    

    如果您试图理解算法,其中的字符串转换可能只是噪音。如果您只是想完成它,请尝试使用整数数组并改用 LINQ。

    【讨论】:

      【解决方案6】:

      呸。 我明白我做了什么。

      string[] lines = File.ReadAllLines ( "TwoNumbers.txt" );
      
              int leastNumber = 0;
              int previousNumber = 0;
      
              foreach (string line in lines)
                  {
                  int currentNumber = int.Parse ( line );
                  **currentNumber = leastNumber;**
      
                  if (leastNumber == 0 || currentNumber < leastNumber)
                      {
                      leastNumber = currentNumber;
                      }
                  previousNumber = currentNumber;
                  }
              Console.WriteLine ("The least number is: " + leastNumber);
              Console.ReadLine ();
      

      不需要分配currentNumber = leastNumber;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-30
        • 1970-01-01
        • 1970-01-01
        • 2011-08-01
        相关资源
        最近更新 更多