我有一个用户输入:
public double[] ArrayOfDoublePrecisionFloatingPointValues()
{
Console.Write("Enter how many values (double in C#) you want to enter in the Array of Doubles: ");
int size = Convert.ToInt32(Console.ReadLine()); //Convert userinput to integer
double[] userInput = new double[size];
for (int i = 0; i < size; i++)
{
Console.Write("Type Double Value {0}: ", i + 1);
userInput[i] = Convert.ToDouble(Console.ReadLine());
}
return userInput;
}
当我输入这些值时,它会根据 for 循环重复的次数来创建重复项,以根据用户建立的大小输入数组值。 现在我看不到另一种获取用户输入以创建数组的方法。 因此,当我将数组放入字典中时,我重复了相同的值。 我不希望数组重复。 我只想要用户输入的原始数组。 以下是字典的代码:
UserInput u = new UserInput();
double[] userInputArray = u.ArrayOfDoublePrecisionFloatingPointValues();
for (int i = 0; i < userInputArray.Length; i++)
{
if(userInputArray == null)
{
Console.WriteLine("You have entered no values! Add values");
}
else if(userInputArray != null)
{
Dictionary<int, double> indexAndIndexValue = new Dictionary<int, double>();
foreach (var (j, t) in userInputArray.Enumerate())
{
indexAndIndexValue.Add(j, t);
}
foreach (var (key, value) in indexAndIndexValue)
{
Console.WriteLine(key + ":" + value);
Console.Write("------");
Console.WriteLine("Count: " + indexAndIndexValue.Count);
}
请注意,我已经尝试了 Distinct()。ToArray() 无济于事。 协助将不胜感激。
ArrayOfDoublePrecisionFloatingPointValues()
总是return
数组,即使用户指定了size
0
。 稍后测试userInputArray == null
以查看用户是否提供了任何输入时,该测试将始终失败。 当size
0
时,您需要将ArrayOfDoublePrecisionFloatingPointValues()
更改为return null;
...
...或测试public double[] ArrayOfDoublePrecisionFloatingPointValues() { Console.Write("Enter how many values (double in C#) you want to enter in the Array of Doubles: "); int size = Convert.ToInt32(Console.ReadLine()); //Convert userinput to integer //TODO: Warn the user about negative input if (size < 1) { return null; } double[] userInput = new double[size]; for (int i = 0; i < size; i++) { Console.Write("Type Double Value {0}: ", i + 1); userInput[i] = Convert.ToDouble(Console.ReadLine()); } return userInput; }
userInputArray.Length == 0
...
我的代码将执行后者。if (userInputArray.Length == 0) { Console.WriteLine("You have entered no values! Add values"); } else { // ...
- 您的
Dictionary<,>
的作用域为for
循环,因此每次迭代您都会创建一个新的空Dictionary<,>
。 在循环外创建Dictionary<,>
,以便在循环后访问它。 - 当
if
分支(userInputArray != null
/userInputArray.Length == 0
)测试(并失败)"用户确实提供了输入"时,您无需在else
分支中测试"用户未提供输入"。 - 你不需要检查用户是否在
for
循环的每次迭代中提供了任何输入;他们要么提供了,要么没有,所以你的for
应该嵌套在if...else
内,而不是相反。 - 你正在为
userInputArray
的每个元素添加userInputArray
的每个元素(foreach (var (j, t) in userInputArray.Enumerate())
for (int i = 0; i < userInputArray.Length; i++)
)。 相反,您应该只添加当前索引和值。
进行这些更改后,我最终会得到这个...
UserInput u = new UserInput();
double[] userInputArray = u.ArrayOfDoublePrecisionFloatingPointValues();
Dictionary<int, double> indexAndIndexValue = new Dictionary<int, double>();
if (userInputArray.Length == 0)
{
Console.WriteLine("You have entered no values! Add values");
}
else
{
for (int i = 0; i < userInputArray.Length; i++)
{
indexAndIndexValue.Add(i, userInputArray[i]);
}
foreach (var (key, value) in indexAndIndexValue)
{
Console.WriteLine(key + ":" + value);
Console.Write("------");
Console.WriteLine("Count: " + indexAndIndexValue.Count);
}
}
//TODO: Use indexAndIndexValue, which may be empty
我将显示indexAndIndexValue
内容的代码移到for
循环之后,以便您可以看到最终内容,但是,如果您想查看它如何随每次迭代而变化,您可以将其保留在for
循环内的位置。
如果你想确保ArrayOfDoublePrecisionFloatingPointValues()
只会return
至少有一个元素的double[]
,你可以这样写......
public double[] ArrayOfDoublePrecisionFloatingPointValues()
{
int size;
while (true)
{
Console.Write("Enter a positive number of values (double in C#) you want to enter in the Array of Doubles: ");
string input = Console.ReadLine();
if (!int.TryParse(input, out size) || size < 1) //Convert userinput to integer
{
Console.WriteLine($"ERROR: "{input}" is not a positive integer.");
}
else
{
break;
}
}
double[] userInput = new double[size];
for (int i = 0; i < size; i++)
{
Console.Write("Type Double Value {0}: ", i + 1);
//TODO: Use double.TryParse() to reject non-Double input
// https://learn.microsoft.com/dotnet/api/system.double.tryparse
userInput[i] = Convert.ToDouble(Console.ReadLine());
}
return userInput;
}
int.TryParse()
在传递非整数输入时会return
false
(例如""
,"ABC"
,"123.456"
),如果它return
true
,我们再进行测试以确保它也是一个阳性int
。