2013-03-04 92 views
1

目标是创建一个程序,当输入一系列数字时,显示最小值和最大值。 -99将被用作哨兵。从C#中的一系列数字中获取最小值和最大值,无需排序

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

namespace ConsoleApplication12 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      double number = 0, maxValue = 0, minValue = 0; 
      string goOn = "Y"; 

      Console.WriteLine("Please enter a series of numbers, when you wish to stop entering numbers please enter -99."); 
      Console.WriteLine("The smallest and largest values will then be displayed."); 
      Console.WriteLine("Remember not to enter -99 unless you want the series to end."); 
      do 
      { 
       while (!double.TryParse(Console.ReadLine(), out number)) 
        Console.WriteLine("Please enter whole numbers only"); 

       while (number != -99) 
       { 
        process(ref number, ref minValue, ref maxValue); 

        while (!double.TryParse(Console.ReadLine(), out number)) 
         Console.WriteLine("Please enter whole numbers only"); 
       } 
       Console.WriteLine("The smallest value is {0} and the largest value is {1}.", minValue, maxValue); 
       Console.WriteLine("Do you want to enter another series of numbers?"); 
       Console.WriteLine("If so enter y, if you want to end press any other key"); 
       goOn = Console.ReadLine(); 
       if (goOn.ToUpper() == "Y") 
       { 
        Console.WriteLine("Please enter your set of numbers."); 
        Console.WriteLine("Remember not to enter -99 unless you want the series to end."); 
       } 

      } while (goOn.ToUpper() == "Y"); 
     } 
     static void process(ref double minValue, ref double maxValue, ref double number) 
     { 

      if (number > maxValue) 
      { 
       number = maxValue; 
      } 
      if (number < minValue) 
      { 
       number = minValue; 
      } 

     } 
    } 
} 

我还没学会阵列或气泡或类呢,但这里的问题:

大概是因为得到最小值和最大值的方法,如果我说3型,22 ,7,15,1 I将得到的15代替22,因为该值22已被抛出并替换为7.

不被显示的最小值,并且代替显示为0

时输入一个非数字,并且在显示错误消息之后,则更多数字被输入,那么minValue显示与maxValue相同。

+2

您目前的方法*从不*更改'minValue'或'maxValue'。它*只*改变'号码'。这似乎不太可能是你想要的。 (我强烈怀疑你不应该通过引用传递'number' ......)另外,当你解析双打时,要求整数是很奇怪的......所以“3.5”很好,但它是不是一个整数... – 2013-03-04 08:48:28

+0

我已经切换了它,但minValue仍然没有显示,除非它小于0. – Sabotenderizer 2013-03-04 09:52:22

回答

6

这是一个简单的错误:

static void process(ref double minValue, ref double maxValue, ref double number) 
    { 

     if (number > maxValue) 
     { 
      maxValue = number; 
     } 
     if (number < minValue) 
     { 
      minValue = number; 
     } 

    } 

您必须影响包括maxValue和minValue(最小值),而不是数量。

+0

它仍然没有输入任何内容minValue,是否是一个变量传递的问题? – Sabotenderizer 2013-03-04 09:03:27

+0

现在只显示小于0的minValue。 – Sabotenderizer 2013-03-04 09:45:43

+0

@Sabotenderizer:是的,它会的。所以你有没有想过这是为什么呢? 'minValue'的初始值是什么,它的唯一条件是什么? – 2013-03-04 09:55:32

相关问题