转换.ToInt32用户输入数组到int c#

本文关键字:int 数组 输入 ToInt32 用户 转换 | 更新日期: 2023-09-27 18:02:54

我有附加的代码,它试图找到用户输入的数组中的所有1。程序要求用户选择数组大小,然后输入该大小的数字,其中包含一些1。然后计算找到的1的个数。

我猜用户给出的输入是字符串的形式?因此,如果他们输入12345,它将是一个包含一个1的字符串。

我试图将数组转换为int32,虽然我不认为我完全理解为什么它必须是int32。

如果有人能帮助我理解这个程序的工作原理,为什么我得到以下错误,我会很感激。

类型为"System"的未处理异常。FormatException'发生在dll附加信息:输入字符串不正确格式。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace count1s
{
    class Program
    {
        static void Main(string[] args)
        {
            int count = 0;
            Console.WriteLine("Enter a number for the array length");
            int limit = int.Parse(Console.ReadLine());
            int[] array1s = new int[limit];
            Console.WriteLine("Enter a number with some 1s in it");
            for(int i=0; i<limit; i++)
            {
                array1s[i] = Convert.ToInt32(Console.ReadLine());
            }
            foreach (int number in array1s)
            {
                if (number == 1)
                {
                    count++;
                }
            }
            Console.WriteLine("The number of 1s in the array is: {0}", count);
            Console.ReadLine();
        }
    }
}

转换.ToInt32用户输入数组到int c#

你得到这个错误是因为你在一行中输入数组元素。

如果你在一行中输入一个元素,那么程序将正常工作。

如果你想在一行中接受数字,那么你可以使用分割函数,如

String []numbers = Console.ReadLine().Split(' ');
for (int i = 0; i < limit; i++)
{
    array1s[i] = Convert.ToInt32(numbers[i]);
}
foreach (int number in array1s)
{
    if (number == 1)
    {
        count++;
    }
}

我想我也不完全明白为什么它必须是int32。

不必如此。这取决于你的输入。如果用户输入一个足够小的数字,它也可以适合short(16位),并且您可以将string解析为它。

为什么我得到以下错误

因为你试图解析一个不能解析为有效的int值的string。如果不确定输入是否有效,可以使用int.TryParse等方法,该方法返回一个布尔值,指示解析的成功或失败:

int i = 0;
while (i < limit)
{
    string value = Console.ReadLine();
    int parsedValue;
    if (!int.TryParse(value, out parsedValue))
    {
        Console.WriteLine("You've entered an invalid number. Please try again");
        continue;
    }
    array[i] = parsedValue;
    i++;
}

如果你想计算所有出现1的次数,你可以简单地使用Enumerable.Count,它接受一个谓词:

return array.Count(number => number == 1);

使用

for(int i=0; i<limit; i++)
{
    int value;
    var isNumber = int.TryParse(Console.ReadLine(), out value);
    if(isNumber)
    {
       array1s[i] = value;
    }
    else
    {
       Console.WriteLine("Invalid value you have entered");
       continue;
    }
}

好吧,现在我觉得自己有点像个白痴。我尝试了一些你的回答,非常感谢,他们很好。我回去尝试了我最初发布的代码,发现它确实有效。我只需要在每个条目进入数组后点击回车。我将在稍后正确地查看所有这些内容,以找出发生了什么。

再次感谢所有人-不得不说-真的很惊讶这么快就在这里得到这么多的回应。太棒了! !

我刚在网上找到了一篇关于Microsoft: DEV204x c#编程课程的非常好的文章。我想这将对所有有同样问题的人有所帮助。希望我没有违反任何版权法或stackoverflow规则。这是一门免费的课程,所以我怀疑。

数据转换

c#支持两种固有的数据类型转换(强制类型转换),隐式和显式。c#将在可能的情况下使用隐式转换,主要是在转换不会导致数据丢失或转换可以使用兼容的数据类型的情况下。下面是隐式数据转换的示例:

从小整型转换为大整型:

int myInt = 2147483647;
long myLong= myInt;

long类型的内存大小为64位,而int类型的内存大小为32位。因此,long类型可以很容易地容纳存储在int类型中的任何值。从long型转换为int型可能会导致数据丢失,因此应该使用显式强制类型转换。

显式强制转换以以下两种方式之一完成,如下面的示例所示。

double myDouble = 1234.6;
int myInt;
// Cast double to int by placing the type modifier ahead of the type to be converted
// in parentheses
myInt = (int)myDouble;

第二个选择是使用。net框架中提供的方法。

double myDouble = 1234.6;
int myInt;
// Cast double to int by using the Convert class and the ToInt32() method.
// This converts the double value to a 32-bit signed integer
myInt = Convert.ToInt32(myDouble);

在Convert类中,你会发现许多其他的方法可以转换成不同的整型数据类型,如ToBoolean()、ToByte()、ToChar()等。

Convert.ToInt32()方法还可用于将字符串文字强制转换为数字数据类型。例如,您可能有一个基于gui的应用程序,其中在文本框中使用输入数据。当传递给应用程序中的代码时,这些值是字符串值。使用上述方法将字符串强制转换为数字可以帮助防止在代码中试图在特定区域使用错误的数据类型时出现异常。

c#还提供了另一种机制来处理类型转换。使用TryParse()方法和Parse()方法也可以帮助进行类型转换。这些方法附加到c#中的类型上,而不是Convert类。
// TryParse() example
bool result = Int32.TryParse(value, out number);
// Parse() example
int number = Int32.Parse(value);

在TryParse()示例中,该方法返回一个布尔值结果,指示转换是否成功。在Parse()示例中,如果转换不成功,将抛出异常。