※ ChatGPTを利用し、要約された質問です(原文:[C#]順序通りに実行されない)
[C#]順序通りに実行されない
このQ&Aのポイント
C#のプログラムで生徒の点数を配列に格納したり参照したりするプログラムが順序通りに実行されない問題が発生しています。
具体的には、生徒数を入力する部分と生徒名と点数を入力する部分の順序が逆になっているため、意図した通りに動作しません。
この問題の原因を特定するために、コードの記述や条件などを確認したいです。
次のC#のプログラムについて質問です。
//ここから
using System;
class Myclass
{
double[] point;
string[] name;
int nMax;
public double this[string str]
{
get
{
for (int i = 0; i < nMax; i++)
{
if (str == name[i])
return point[i];
}
return -1.0;
}
set
{
for (int i = 0; i < nMax; i++)
{
if (str == name[i])
{
point[i] = value;
break;
}
}
}
}
public Myclass(int n)
{
point = new double[n];
name = new string[n];
nMax = n;
setname();
}
void setname()
{
for(int i=0;i<nMax;i++)
{
Console.Write("生徒名[{0}] = ",i);
name[i] = Console.ReadLine();
}
}
}
class ch08ex02
{
public static void Main()
{
Console.WriteLine(
"まずはじめに生徒数と、全員の名前入力が必要です");
Console.Write("生徒数--- ");
string strn = Console.ReadLine();
Myclass mc = new Myclass(int.Parse(strn));
string ans, strp;
Console.WriteLine("X入力で終了");
while (true)
{
Console.Write("点数を入力したい生徒名--- ");
if ((ans = Console.ReadLine()) == "X")
break;
Console.Write("点数--- ");
strp = Console.ReadLine();
mc[ans] = double.Parse(strp);
}
Console.WriteLine();
Console.WriteLine("X入力で終了");
while (true)
{
Console.Write("点数を知りたい生徒名--- ");
ans = Console.ReadLine();
if (ans == "X")
break;
Console.WriteLine("{0}くんの点数は{1}点です", ans, mc[ans]);
}
}
}
//ここまで
これはプロパティを使って生徒の点数を配列に格納したり参照したりするプログラムですが、実行するとMain()の
Console.Write("生徒数--- ");
string strn = Console.ReadLine();
Myclass mc = new Myclass(int.Parse(strn));
string ans, strp;
Console.WriteLine("X入力で終了");
while (true)
{
Console.Write("点数を入力したい生徒名--- ");
if ((ans = Console.ReadLine()) == "X")
break;
Console.Write("点数--- ");
strp = Console.ReadLine();
mc[ans] = double.Parse(strp);
}
の部分が思い通りに動いてくれません。
まずコンソールに「生徒数--- 」と表示されConsole.ReadLine()で数字を受け取り、その数からMyclassのインスタンスを作成し、「X入力で終了」と表示した後whileループで生徒名と点数の入力を受け付けるはずです。
しかしこれを実行すると「X入力で終了」と表示する前にwhileループに入り、ループを抜けた後「X入力で終了」と表示されます。
つまり順番が逆になっているわけです。
なぜこうなるかわかりません。
誰か教えてください、お願いします。