【发布时间】:2019-02-15 21:14:31
【问题描述】:
在 C# 中,我在 main() 中声明了一个浮点数组
float[] notas = new float[8];
在main()中调用方法并通过引用传递数组
PopulateArray(ref notas);
这里是PopulateArray(ref float[] arr1)方法的实现
static void PopulateArray(ref float[] arr1)
{
bool vakid;
for (int i = 0; i < arr1.Length; i++)
{
do
{
do
{
Console.Write($"Insira nota {i + 1} ==>");
vakid = float.TryParse(Console.ReadLine(), out arr1[i]);
if ((arr1[i] > 20.0) || (arr1[i] < 0.0))
{
Console.Write("\n\n\t\tAs notas só vão de 0 a 20\n\nPrima uma tecla para continuar");
Console.ReadKey();
}
Console.Clear();
}while (!((arr1[i] <= 20) && (arr1[i] >= 0)));
} while (!vakid);
}
}
使用了两个循环,一个确保输入的值在 [0, 20] 之间,另一个确保任何输入都是十进制数(浮点数)。在此实施之前,数组 notas 是 integer 并且一切正常,只允许 integers 并且介于 [ 0, 20]。当我决定将数据类型更改为 float 时,每当我输入一个十进制数(即 3.0)时,它都不会通过外循环,就像我输入一个数字以外的字符一样,与我键入字母时的方式非常相似。 那么如何输入十进制数字以存储在我的数组中?类型
【问题讨论】:
-
我不清楚您所说的“它不经过外循环”是什么意思。您有三个嵌套循环。哪个不符合您的预期?当您在调试器中单步执行时,代码首先在哪里执行了一些意想不到的操作?
-
在您的计算机上有效的区域设置(国际号码格式设置)?
-
值得注意的是,这里不需要
ref关键字。数组是 c# 中的对象,通过引用传递。仅当您想更改调用方法中的引用时才需要ref关键字,而您并没有这样做。 -
不要不要忽略有效变量。完成您的 SO 个人资料,以便我们可以看到您住在哪里,我的水晶球说您需要输入“3,0”,逗号而不是句号。你可以从你的杂货账单上看到。
-
@mxajd 您正在为数组赋值。您没有分配新的数组引用。
ref关键字不需要。