用户给出3个数字,程序给出三个中较大的一个

伦索

新成员
已加入
2019年8月10日
留言内容
1
编程经验
Beginner
嘿!
因此,我一直在关注freeCodeCamp.org C#教程(Youtube)。当我正在学习if语句时,主持人说他将创建一个小程序,给定3个数字,可以为您提供三个更大的数字。作为我这个明显优越的个人,在看到他的建议/演练之前,我会尝试自己做。我的程序有些不同,因为我使用用户输入,而不是在编写代码然后运行程序时简单地选择3个数字。所以我的想法是用户将输入三个数字(这样:123,而不是1 2 3)。然后,我将使用它们的索引号来识别它们(例如1将是arr [0])。然后,将它们用于我的函数(MaxNum(arr [0],arr [1],arr [2])),然后在控制台中看到最大的内容。问题是,如果我进行Console.Write他们,它们一切正常,但是一旦我使用该功能,数字就会改变。例如,对于数字123,现在1变为49,2变为50,3变为51,因此打印了51。我有"Console.Written"所有这些(arr [0],arr [1],arr [2]),它们分别为1 2和3。我的代码如下所示:如果有人可以帮助我,谢谢 :D 是的,我是一个完全菜鸟。

C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharpLearning
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Enter three numbers: ");
            string arr = Console.ReadLine();

            Console.WriteLine("The biggest number is: " + MaxNum(arr[0], arr[1], arr[2]));
          
            Console.ReadLine();
        }

        static int MaxNum(int num1, int num2, int num3)
        {
            int result;

            if (num1 >= num2 && num1 >= num3)
            {
                result = num1;
            }
            else if (num2 >= num1 && num2 >= num3)
            {
                result = num2;
            }
            else if (num3 >= num1 && num3 >= num1)
            {
                result = num3;
            }
            else
            {
                result = num1;
            }

            return result;
        }
    }
}
 
由主持人最后编辑:

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,523
地点
悉尼,澳大利亚
编程经验
10+
The problem is that you are playing fast and loose with data types. Your MaxNum method expects three int values but that's not what you're passing here:
C#:
string arr = Console.ReadLine();

Console.WriteLine("The biggest number is: " + MaxNum(arr[0], arr[1], arr[2]));
Firstly, why would you name a string variable arr? That name implies that it's a array but it's not. The problem is that you are treating it like it's an int array and assuming that arr[0], etc, are the numbers the user entered as int values. They are not. arr is type string so arr[0] is type char. In order to convert that to the required int, the system is getting the Unicode point value of that character. Guess what the Unicode point value of the character '1' is.

什么 needs to happen is that you need to convert the char to the int value you expect explicitly. To do that, you would convert the char to a string and then parse that. There are various ways to perform the parsing, many of which will implicitly convert a char to a string but, if you use Convert.ToInt32, you'll need to perform the conversion explicitly because that method will convert a char to its Unicode point value.
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,048
地点
挪威
编程经验
10+
最佳 底部