奇数和偶数问题

已加入
2020年4月26日
留言内容
3
编程经验
Beginner
提供一个正的四位数。编写一个控制台应用程序以从最重要的注释开始的每个数字显示,无论是偶数还是奇数。
例子:

有关输入信息:

3482

控制台将显示:

奇怪的
甚至
甚至
甚至
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,566
地点
悉尼,澳大利亚
编程经验
10+
在我们需要帮助之前,您需要为自己付出一些努力。研究笔记和/或文本框,在线进行适当的研究,然后尝试编写代码。如果您在执行此操作时遇到特定问题,则可能可以为我们提供帮助。
 

Andreaangella

Microsoft C#MVP和.NET社区负责人
已加入
2017年8月31日
留言内容
4
地点
英国剑桥
编程经验
10+
推特
angella_andrea
我的建议是问自己一个问题:
您将如何在不使用计算机的情况下手动解决此问题?

尝试解决您在纸上手动提供的示例。尝试确定您要遵循的步骤并确定模式。

然后尝试一次将您在代码中标识的每个步骤转换为一个步骤。

在尝试了一段时间之后,如果您遇到困难,请返回此处,在您确定的特定步骤中提出特定问题,或者用Google搜索。
 
已加入
2020年4月26日
留言内容
3
编程经验
Beginner
好的,所以我尝试解决它,我几乎明白了,这是代码:

C#:
static void Main(string[] args)
{
    string inputData = Console.ReadLine();
    string inputData1 = Console.ReadLine();
    string inputData2 = Console.ReadLine();
    string inputData3 = Console.ReadLine();
    int a = Convert.ToInt32(inputData);
    int b = Convert.ToInt32(inputData1);
    int c = Convert.ToInt32(inputData2);
    int d = Convert.ToInt32(inputData3);

    if (a%2 ==0)
    {
        Console.WriteLine("PAR");
    }
    else
    {
        Console.WriteLine("IMPAR");
    }

    if (b%2 ==0)
    {
        Console.WriteLine("PAR");
    }
    else
    {
        Console.WriteLine("IMPAR");
    }

    if (c%2 ==0)
    {
        Console.WriteLine("PAR");
    }
    else
    {
        Console.WriteLine("IMPAR");
    }

    if (d%2 ==0)
    {
        Console.WriteLine("PAR");
    }
    else
    {
        Console.WriteLine("IMPAR");
    }
如何将我的输入放在同一行,如abcd和not
a
b
c
d
?
 

Andreaangella

Microsoft C#MVP和.NET社区负责人
已加入
2017年8月31日
留言内容
4
地点
英国剑桥
编程经验
10+
推特
angella_andrea
好的开始。您已经在使用Console.ReadLine(),并且该方法允许您将所有输入插入一行。该方法返回一个包含所有输入的字符串。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,566
地点
悉尼,澳大利亚
编程经验
10+
你在打电话 ReadLine 四次。如果您只想读取一行输入,则仅调用 ReadLine 一次。这会将整个输入行读入一个 细绳 多变的。然后,您需要将其分开。您可以将 细绳 进入 字符 然后将每个数字转换为数字,或者您可以先将整批数字转换为数字,然后将数字分开。这取决于您,但前者可能更容易。
 

羊皮

知名会员
已加入
2018年9月5日
留言内容
1,982
编程经验
10+
您的开端很好。只是一个快速提示。

不要盲目接受用户输入。尝试将用户输入解析为您期望的任何值是一个好主意。

IE : 细绳 inputData = Console.ReadLine();
int a = Convert.ToInt32(inputData);

 

羊皮

知名会员
已加入
2018年9月5日
留言内容
1,982
编程经验
10+
请注意,如果您具有以下代码:
C#:
            string inputData = Console.ReadLine();
            int a = Convert.ToInt32(inputData);
            if (a % 2 == 0)
            {
                Console.WriteLine("PAR");
            }
如果键入非数字值(例如Z),则第3行会给您一个错误。
这将导致 System.FormatException

请注意,在下面的示例中不会发生这种情况。您应该注意,如果 int.TryParse 无法传递来自用户的输入,您将不会获得异常,这是因为int.TryParse静默失败:
C#:
            string inputData = Console.ReadLine();
            if (int.TryParse(inputData, out int parsed) && parsed % 2 == 0)
            {
                Console.WriteLine("PAR");
            }
您只能使用 Convert.ToInt32 如果您确定用户输入实际上是数字。盲目转换收到的输入时,下面没有检查输入是否为数字的这种验证。因此,我避免亲自编写这样的代码:
C#:
            string inputData = Console.ReadLine();
            int parsed = Convert.ToInt32(inputData);
            if (parsed % 2 == 0)
            {
                Console.WriteLine("PAR");
            }
这有意义吗?
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,566
地点
悉尼,澳大利亚
编程经验
10+
请注意,如果您具有以下代码:
C#:
            string inputData = Console.ReadLine();
            int a = Convert.ToInt32(inputData);
            if (a % 2 == 0)
            {
                Console.WriteLine("PAR");
            }
如果键入非数字值(例如Z),则第3行会给您一个错误。
这将导致 System.FormatException

请注意,在下面的示例中不会发生这种情况。您应该注意,如果 int.TryParse 无法传递来自用户的输入,您将不会获得异常,这是因为int.TryParse静默失败:
C#:
            string inputData = Console.ReadLine();
            if (int.TryParse(inputData, out int parsed) && parsed % 2 == 0)
            {
                Console.WriteLine("PAR");
            }
您只能使用 Convert.ToInt32 如果您确定用户输入实际上是数字。盲目转换收到的输入时,下面没有检查输入是否为数字的这种验证。因此,我避免亲自编写这样的代码:
C#:
            string inputData = Console.ReadLine();
            int parsed = Convert.ToInt32(inputData);
            if (parsed % 2 == 0)
            {
                Console.WriteLine("PAR");
            }
这有意义吗?
显然,在现实世界中,验证是一件好事,但请不要忘记,许多初学者的作业都假设输入是有效的,以便学生不会从实际的教学中分散注意力。帖子#1明确指出提供了一个正的四位数,因此在这种情况下,验证不属于期望的一部分。
 

羊皮

知名会员
已加入
2018年9月5日
留言内容
1,982
编程经验
10+
当然,我同意。 :)

但这并不意味着我们不应该教他们涉及验证的其他课程。虽然她的任务不需要验证,但我认为值得学习。我实际上不同意他们今天如何在学校教授编程。但是回到实际的任务。
如果您只想读取一行输入,则仅调用 ReadLine 一次。这会将整个输入行读入一个 细绳 variable.
给定她有4个变量,我假设她需要4个不同的值。因此,调用ReadLine()将需要用户输入其他值。
 

跳伞者

工作人员
已加入
2019年4月6日
留言内容
2,610
地点
弗吉尼亚州切萨皮克
编程经验
10+
重读作为作业分配的原始问题。她只能得到一个输入。只是在第4篇文章中,她展示了解决问题的尝试,她引入了4个不同的变量并进行了4个不同的输入调用。此外,如果您查看她的封闭线程(由于语言不匹配),则原始标题与C#算法有关,而不一定与检查奇数或偶数有关。对我来说,这意味着作业是写一个可以接受单个4位整数的算法,然后显示每个数字是奇数还是偶数。

除非此任务专门针对数据结构和算法类,否则我建议采用以下方法:
输入"number"作为字符串。 (假设输入实际上是一个整数并且具有数字。)
遍历字符串的每个字符:
-将字符转换为实际整数
-检查整数是否为奇数或偶数
-显示结果

现在,如果该分配是针对数据结构和算法类的,那么我想它们目前正在覆盖堆栈,因此我建议采用以下方法:
输入"number" as a string.
将数字解析为整数。
If TryParse() fails, or if the value is less than 1000 or greater 9999 then declare an error.
当值不为零时,请执行以下操作:
-将值的模10推入堆栈
-将值除以10
当堆栈不为空时,请执行以下操作:
-从堆栈顶部弹出值
-检查整数是否为奇数或偶数
-显示结果
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,076
地点
挪威
编程经验
10+
提供一个正的四位数。编写一个控制台应用程序以显示...
我想大家都误解了作业。该号码已经提供,任务是编写一个应用程序以检查和显示结果。提供:
C#:
var input = "3482";
由于字符串对象是chars对象的集合,因此可以遍历它:
C#:
foreach (var digit in input) {
首先将数字转换为数值,建议使用Char.GetNumericValue方法。然后您可以检查数字是否为奇/偶并显示结果。
 

羊皮

知名会员
已加入
2018年9月5日
留言内容
1,982
编程经验
10+
她只能得到一个输入。只是在第4篇文章中,她展示了解决问题的尝试,她引入了4个不同的变量并进行了4个不同的输入调用。
那是我的错。我度过了很长的一周...

啊,这就是为什么JM呼吁阅读4遍该行。我没有麻烦去重新检查作业。这是我得到的输出:
C#:
奇怪的
EVEN
ODD
EVEN
1234

我这样做是这样,而是使用CharEnumerator:
C#:
        internal static void Request_Response()
        {
            string integer = Console.ReadLine();
            string output = string.Empty;
            using (CharEnumerator char_Value = integer.GetEnumerator())
            {
                while (char_Value.MoveNext())
                {
                    if (int.TryParse(char_Value.Current.ToString(), out int converted_To_Integer))
                    {
                        if (Int_Is_Odd_Or_Even(converted_To_Integer))
                        {
                            Console.WriteLine("EVEN");
                            output = string.Concat(output, converted_To_Integer);
                        }
                        else
                        {
                            Console.WriteLine("ODD");
                            output = string.Concat(output, converted_To_Integer);
                        }
                    }
                    else
                    {
                        throw new FormatException($"Failed to Parse value. { char_Value.Current.ToString() }");
                    }
                }
            }
            int full_Number = Convert.ToInt32(output);
            Console.WriteLine(full_Number);
        }
        public static bool Int_Is_Odd_Or_Even(int value)
        {
            if (value % 2 == 0)
            {
                return true; /* Even */
            }
            else
            {
                return false; /* is odd */
            }
        }
希望这个例子对您有帮助。
 

跳伞者

工作人员
已加入
2019年4月6日
留言内容
2,610
地点
弗吉尼亚州切萨皮克
编程经验
10+
似乎令人费解……可以简化为:
C#:
细绳 input = "3482";
foreach(char ch in input)
{
    if (Char.IsDigit(ch))
    {
        int value = (int) Char.GetNumericValue(ch);
        // or
        // int value = ch - '0';

        bool isOdd = value % 2 != 0;
        Console.WriteLine(isOdd ? "ODD" : "EVEN");
    }
    else
    {
        Console.Error.WriteLine($"{ch} is not a valid digit.");
    }
}
在这种情况下,自己获得枚举数并驱动该枚举数不会显着提高性能。
 

跳伞者

工作人员
已加入
2019年4月6日
留言内容
2,610
地点
弗吉尼亚州切萨皮克
编程经验
10+
嗯,既然我已经站起来,我就必须再次输入。我现在记得:复杂的方法是有意为之的,因此不会仅仅复制并粘贴代码作为答案。我刚刚给我们的OP免费赠品。对不起...
 
最佳 底部