【问题标题】:Find median value of 3 user inputted numbers in C# Without output: Numbers entered: x, y, z Minimum Value: a Median Value: b在 C# 中查找 3 个用户输入数字的中值无输出:输入的数字:x、y、z 最小值:a 中值:b
【发布时间】:2017-10-07 22:00:57
【问题描述】:

我正在尝试查找三个用户输入数字的中位数。请参阅下面的代码,感谢任何帮助以及新手解释原因。据我了解,它们应该被分类成一个列表,然后找到中间的数字。我正在尝试以稳健的方式输出以下内容,以防我想向用户询问 4 个数字。

我正在尝试输出:输入的数字:x、y、z 最小值:一个 中值:b

using System;

public class Assignment
{
    public static void Main()
    {
        int num1; 
        int num2; 
        int num3;
        Console.WriteLine("Enter 3 numbers");

        num1 = Int32.Parse(Console.ReadLine());
        num2 = Int32.Parse(Console.ReadLine());
        num3 = Int32.Parse(Console.ReadLine());

        Console.WriteLine("Numbers entered: {0}  {1}  {2}", num1, num2, num3);
 if(num1<num2)
    if(num2<num3)
        {
        Console.WriteLine("Minimum Value:"+num1);
        }
        else
        {
        Console.WriteLine("Minimum Value:"+num3);
        }
        else
        if(num2<num3)
        {
        Console.WriteLine( "Minimum Value:"+num2);
        }
        else
        {
        Console.WriteLine("Minimum Value:"+num3 );
        }
    }
}

【问题讨论】:

    标签: c#


    【解决方案1】:

    闻起来像作业

    int num1 = Convert.ToInt32(Console.ReadLine()); 
    int num2 = Convert.ToInt32(Console.ReadLine());
    int num3 = Convert.ToInt32(Console.ReadLine());
    List<int> list1 = new List<int>(); 
    list1.Add(num1); 
    list1.Add(num2); 
    list1.Add(num3); 
    Console.WriteLine($"Min:{list.Min()}"); 
    
    list1.Sort();
    int c = list1.Count()%2==0?list1.Count()+1:list1.Count();
    
     int Med = list1[c/2];
    //Console.WriteLine($"Max:{list1.Max()");
    

    我在打电话,所以格式化我的代码很难.. 您可以跳过创建三个整数并使用

    list1.Add(Int.Parse(Console.ReadLine()));
    

    如果你愿意或'n'个数字

    bool b = true;
    int num=0;
    List<int>() l = new List<int>();
    Do{
    Console.Write("Enter number: ");
     b = 
    int.TryParse(Console.ReadLine(), out num);
        l.Add(num);
        }While(b);
        //insert min, max and median of (List) l here 
    

    【讨论】:

    • 嘿伙计,谢谢你的回答。这绝对是家庭作业,但只是我们的第二次研讨会,实际上我们还没有任何课程。这是一个“找到你自己的解决方案”然后被教导如何去做。经过几个小时的谷歌搜索,我最终来到了这里。我会试试上面的,看看我能不能弄明白,对我来说,理解它比得到正确的答案更重要。
    • 我在打电话,更新我的答案有点漂亮,我匆匆忙忙 - 继续检查更新
    • 再次感谢,感谢您的帮助。将继续检查。
    • 已编辑.. 用于 n 个数字
    • 丹尼尔不走运,非常感谢您的帮助,但您能告诉我我在看什么以及应该去哪里。我修改了我的代码,但出现了一些错误:newtest.cs(17,24): error CS8076: Missing close delimiter '}' for interpolated expression with '{'开头。 newtest.cs(17,26): error CS1073: Unexpected token '"); ' newtest.cs(17,36): error CS1010: 常量 newtest.cs(17,40) 中的换行: 错误 CS1026: ) 预期 newtest。 cs(17,40): 错误 CS1002: ; 预期 newtest.cs(29,3): 错误 CS1513: } 预期
    【解决方案2】:

    您的代码现在无法编译它的编写方式,但我可以看到您正在尝试做什么。您可以对其进行更改以便编译,但这不是解决问题的特别有效的方法。

    现在,我认为您正在尝试编写代码来检查每个场景的潜在数字顺序。您可以相对容易地对 3 个数字执行此操作,但如果您想扩展代码以检查 10 个或 100 个数字的列表怎么办?

    我认为您应该将用户输入添加到列表中,对列表进行排序,然后只返回列表的中间值。它的代码更少,更可靠。

    public class FindMedian
    {
        public List<int> numbersList = new List<int>(); // list to store user input
    
        // constructor 
        public FindMedian(int n)
        {
            Console.WriteLine("Please Enter " + n + " numbers. \n\n");
    
            for (int i = 1; i < n + 1; i++)
            {
                Console.WriteLine("Number " + i + " : ");
    
                numbersList.Add(GetUserInput()); // call's GetUserInput
            }
    
            PrintData();
        }
    
        // returns int from Console. Will continue to run until a valid int is entered 
        private int GetUserInput() 
        {
            int temp = 0;
            bool numberValid = false;
    
            while (!numberValid)
            {
                try
                {
                    temp = int.Parse(Console.ReadLine());
                    numberValid = true;
                }
    
                catch
                {
                    Console.WriteLine("Invalid entry. Please try again.\n");
                    numberValid = false;
                }
            }
    
            return temp;
        }
    
        // prints data after user enteres the correct number of ints 
        private void PrintData()
        {
            // If list contains no data
            if (numbersList.Count < 3)
            {
                Console.WriteLine("No User Data Entered");
                return;
            }
    
            numbersList.Sort(); // Sorts list from smallest to largest
    
            int minimum = numbersList[0];
            int median;
    
            // if list count is even and median is average of two middle numbers
            if (numbersList.Count % 2 == 0)
            {
                median = (numbersList[(numbersList.Count / 2) - 2] + numbersList[(numbersList.Count / 2) - 1] / 2);
            }
    
            // if list count is odd and median is just middle number
            else 
            {
                median = numbersList[(numbersList.Count / 2)];
            }
    
            Console.WriteLine("Minimum Number : " + minimum);
            Console.WriteLine("Median Number : " + median);
        }
    }
    

    【讨论】:

    • 您好,感谢您提供易于理解的详细回复。当我正在艰难地学习时,这里和那里的支架会产生很大的不同。请您编辑您的答案,以便我可以将其复制并粘贴到代码编辑器中并运行程序,这样我就可以进行反向工程。我试过用你的版本修改我的版本,当然没有用。
    猜你喜欢
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 2014-11-29
    • 2016-07-24
    • 2020-07-10
    • 2016-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多