ユーザーの入力から配列を埋めるには、どのような方法があるでしょうか?
プロンプトメッセージを表示して、ユーザーから値を取得するのが解決策でしょうか?
質問をもう少し明確にしていただけませんか? ユーザーから決まった数の回答を得ようとしているのでしょうか? テキスト、整数、浮動小数点数など、どのようなデータ型を想定していますか? これは大きな違いです。
例えば整数の配列が欲しいのであれば、空白やカンマで区切って入力させ、その後に
string foo = Console.ReadLine();
string[] tokens = foo.Split(",");
List<int> nums = new List<int>();
int oneNum;
foreach(string s in tokens)
{
if(Int32.TryParse(s, out oneNum))
nums.Add(oneNum);
}
もちろん、必ずしもint型に変換する必要はないのですが、どのように変換するかを示すのに役立つと思います。
これをarinのコードへの回答として追加することは、コメントでそれを続けるよりもずっと理にかなっています。..
1)doubleではなくdecimalを使用することを検討してください。 ユーザーが期待する答えを出す可能性が高くなります。 その理由については、http://pobox.com/~skeet/csharp/floatingpoint.htmlおよびhttp://pobox.com/~skeet/csharp/decimal.htmlを参照してください。 基本的に、10進数は、人間が2倍よりも数値について考える方法に非常に近く機能します。 ダブルは、コンピュータが数値について「自然に」考える方法のように機能します。そのため、高速ですが、ここでは関係ありません。
2)ユーザー入力の場合、通常、不良入力に例外をスローしないメソッドを使用する価値があります。 decimal.TryParseおよびint.TryParse。 これらは、解析が成功したかどうかを示すためにブール値を返し、「アウト」パラメーターを使用して結果を与えます。 「アウト」パラメーターについてまだ学習していない場合は、現時点ではこの点を無視する価値があるかもしれません。
3)それはほんの少しのポイントですが、すべての「for」/「if」(etc)ボディにブレースを付けるのが賢明だと思うので、これを変更します。
for (int counter = 0; counter < 6; counter++)
Console.WriteLine("{0,5}{1,8}", counter, array[counter]);
これに:
for (int counter = 0; counter < 6; counter++)
{
Console.WriteLine("{0,5}{1,8}", counter, array[counter]);
}
これにより、ブロックがより明確になり、誤って次のように記述しないことを意味します。
for (int counter = 0; counter < 6; counter++)
Console.WriteLine("{0,5}{1,8}", counter, array[counter]);
Console.WriteLine("----"); // This isn't part of the for loop!
4)スイッチステートメントには「デフォルト」のケースがありません。したがって、ユーザーが「はい」または「いいえ」以外のものを入力した場合、ユーザーはそれらを無視して終了します。 次のようなものを用意したい場合があります。
bool keepGoing = true;
while (keepGoing)
{
switch (answer)
{
case "yes":
Console.WriteLine("===============================================");
Console.WriteLine("please enter the array index you wish to get the value of it");
int index = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("===============================================");
Console.WriteLine("The Value of the selected index is:");
Console.WriteLine(array[index]);
keepGoing = false;
break;
case "no":
Console.WriteLine("===============================================");
Console.WriteLine("HAVE A NICE DAY SIR");
keepGoing = false;
break;
default:
Console.WriteLine("Sorry, I didn't understand that. Please enter yes or no");
break;
}
}
5)LINQについて学び始めたら、これに戻って、入力を次のように合計するforループを交換することをお勧めします。
// Or decimal, of course, if you've made the earlier selected change
double sum = input.Sum();
繰り返しますが、これはかなり進んでいます-今のところ心配する必要はありません。!
C#には入力を集めるメッセージボックスはありませんが、代わりにVisual Basicの入力ボックスを使用することができます。
"Microsoft Visual Basic .NET Runtime"への参照を追加し、挿入すると、次のようになります。
using Microsoft.VisualBasic;
とすることができます。
List<string> responses = new List<string>();
string response = "";
while(!(response = Interaction.InputBox("Please enter your information",
"Window Title",
"Default Text",
xPosition,
yPosition)).equals(""))
{
responses.Add(response);
}
responses.ToArray();
static void Main()
{
double[] array = new double[6];
Console.WriteLine("Please Sir Enter 6 Floating numbers");
for (int i = 0; i < 6; i++)
{
array[i] = Convert.ToDouble(Console.ReadLine());
}
double sum = 0;
foreach (double d in array)
{
sum += d;
}
double average = sum / 6;
Console.WriteLine("===============================================");
Console.WriteLine("The Values you've entered are");
Console.WriteLine("{0}{1,8}", "index", "value");
for (int counter = 0; counter < 6; counter++)
Console.WriteLine("{0,5}{1,8}", counter, array[counter]);
Console.WriteLine("===============================================");
Console.WriteLine("The average is ;");
Console.WriteLine(average);
Console.WriteLine("===============================================");
Console.WriteLine("would you like to search for a certain elemnt ? (enter yes or no)");
string answer = Console.ReadLine();
switch (answer)
{
case "yes":
Console.WriteLine("===============================================");
Console.WriteLine("please enter the array index you wish to get the value of it");
int index = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("===============================================");
Console.WriteLine("The Value of the selected index is:");
Console.WriteLine(array[index]);
break;
case "no":
Console.WriteLine("===============================================");
Console.WriteLine("HAVE A NICE DAY SIR");
break;
}
}