【问题标题】:How to add <= or >= to a int.Parse [duplicate]如何将 <= 或 >= 添加到 int.Parse [重复]
【发布时间】:2018-07-29 15:41:01
【问题描述】:

我正在做一些事情,我希望用户能够输入 0-9 之间的数字,然后它会为它吐出单词,例如。 1合一。我对第一部分很好,但是,我不知道如何获取它,以便它告诉用户它是否输入了无效的数字或字母。

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

namespace _0_9_output
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Write a number between 0-9: ");
            int number = int.Parse(Console.ReadLine());
            if (number == 0)
            {
                Console.WriteLine("Zero");
            }
            else if (number == 1)
            {
                Console.WriteLine("One");
            }
            else if (number == 2)
            {
                Console.WriteLine("Two");
            }
            else if (number == 3)
            {
                Console.WriteLine("Three");
            }
            else if (number == 4)
            {
                Console.WriteLine("Four");
            }
            else if (number == 5)
            {
                Console.WriteLine("Five");
            }
            else if (number == 6)
            {
                Console.WriteLine("Six");
            }
            else if (number == 7)
            {
                Console.WriteLine("Seven");
            }
            else if (number == 8)
            {
                Console.WriteLine("Eight");
            }
            else if (number == 9)
            {
                Console.WriteLine("Nine");
            }
            else
            {
                (number >= 10);
            }

            {
                Console.Write("That was an invalid statement.");
            }


        }
    }
}

这是我的第一批代码之一,因此请慷慨提供提示/建议。我是一名年轻的程序员,在学校才刚刚开始学习。

【问题讨论】:

  • Parse 在输入无效时抛出异常,但 TryParse 只返回 false。试试看。
  • 或者将整个东西包装在一个 try/catch 中。将 else 语句更改为仅在下面找到该 console.writeline 方法,因为您用尽了允许的值,因此无需再次检查。
  • @AhmedAbdelhameed - 不是真的,因为该问题不涉及将字符串解析为整数,这是 OP 真正遇到的问题。

标签: c# int


【解决方案1】:

我建议两个主要的事情:

  1. 在下面的代码中提取模型(即数字名称)s_Numbers 数组
  2. 使用int.TryParse 而不是Parse(在上下文中检查bool 比捕获异常更容易)

类似这样的:

 class Program {
   // Model: numbers' names
   private static string[] s_Numbers = new string[] {
     "Zero", "One", "Two", "Three", "Four",
     "Five", "Six", "Seven", "Eight", "Nine" 
   };

   static void Main(string[] args) {
     Console.Write("Write a number between 0-9: ");

     // cyclomatic complexity reduction (10 ifs dropped), 
     // readability increasing
     //
     // out var number - C# 7.0 construction; if early C# version used:
     //  
     // int number;
     // if (int.TryParse(Console.ReadLine(), out number))  ...
     //
     if (int.TryParse(Console.ReadLine(), out var number)) 
       if (number >= 0 && number <= 9)
         Console.Write(s_Numbers[number]);     // number in [0..9] range 
       else
         Console.Write("Out of [0..9] range"); // number out of range 
     else 
       Console.WriteLine("That was an invalid statement."); // not an integer
   }
 }

【讨论】:

  • 如果 OP 没有 VS 2017,out var number 可能会令人困惑
  • @Camilo Terevinto:谢谢,我同意C# 7.0+ 不那么受欢迎。我添加了一条评论
  • 那不会编译你错过了}
  • @Slaven Hvar:我明白了,谢谢!让我们放弃{
  • 希望 OP 不会因为缺少 { } 而感到困惑
【解决方案2】:
        static void Main(string[] args)
        {
        string x =  Console.ReadLine();


        try
        {


             if (int.Parse(x) == 0)
        {
            Console.WriteLine("Zero");
        }
        else if (int.Parse(x) == 1)
        {
            Console.WriteLine("One");
        }
        else if (int.Parse(x) == 2)
        {
            Console.WriteLine("Two");
        }
        else if (int.Parse(x) == 3)
        {
            Console.WriteLine("Three");
        }
        else if (int.Parse(x) == 4)
        {
            Console.WriteLine("Four");
        }
        else if (int.Parse(x) == 5)
        {
            Console.WriteLine("Five");
        }
        else if (int.Parse(x) == 6)
        {
            Console.WriteLine("Six");
        }
        else if (int.Parse(x) == 7)
        {
            Console.WriteLine("Seven");
        }
        else if (int.Parse(x) == 8)
        {
            Console.WriteLine("Eight");
        }
        else if (int.Parse(x) == 9)
        {
            Console.WriteLine("Nine");
        }


        }
        catch
        { 
            Console.WriteLine("That was an invalid statement");
        }

    }

【讨论】:

【解决方案3】:

您可以像下面这样更改您的代码。

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

namespace _0_9_output
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Write a number between 0-9: ");
            int number = int.Parse(Console.ReadLine());
            if (number == 0)
            {
                Console.WriteLine("Zero");
            }
            else if (number == 1)
            {
                Console.WriteLine("One");
            }
            else if (number == 2)
            {
                Console.WriteLine("Two");
            }
            else if (number == 3)
            {
                Console.WriteLine("Three");
            }
            else if (number == 4)
            {
                Console.WriteLine("Four");
            }
            else if (number == 5)
            {
                Console.WriteLine("Five");
            }
            else if (number == 6)
            {
                Console.WriteLine("Six");
            }
            else if (number == 7)
            {
                Console.WriteLine("Seven");
            }
            else if (number == 8)
            {
                Console.WriteLine("Eight");
            }
            else if (number == 9)
            {
                Console.WriteLine("Nine");
            }
            else
            {
                Console.Write("That was an invalid statement.");
            }

        }
    }
}

如果输入数字不在 0-9 之间,最后一个 else 语句获取执行并打印消息输出。

【讨论】:

  • 这将如何解决输入&lt;=或其他的问题?
猜你喜欢
  • 2011-06-15
  • 2011-04-27
  • 2013-11-16
  • 1970-01-01
  • 1970-01-01
  • 2018-08-07
  • 2014-08-07
  • 2015-01-14
  • 2011-11-19
相关资源
最近更新 更多