私のオフライン署名検証プロジェクトでは、位相特性としてオイラー数を使用しています。GOTOステートメントの実装
私はこのlink通過し、私はそこに擬似コードを発見し、私のC#の実装は以下の通りである:それはlabelA
とlabelB
が範囲を超えていると言う
public void eulers(bool[][] t)
{
int w2 = 0;
int wc = 0;
int eulers_number = 0;
int x = 2;
int y = 2;
while (y <= t.Length)
{
while (x <= t.Length)
{
bool p1 = t[x][y];
bool p2 = t[x - 1][y];
bool p3 = t[x][y - 1];
bool p4 = t[x - 1][y - 1];
if (p4 == true)
{
x++;
}
else if (p2 == false)
{
labelA:
if (p3 == true)
{
x = x + 2;
}
else if (p1 == false)
{
x++;
if (x <= t.Length)
{
goto labelA;
break;
}
}
else
{
w2++;
x++;
if (x <= t.Length)
{
goto labelB;
break;
}
}
}
else
{
labelB:
if (p3 == true)
{
wc++;
x = x + 2;
}
else if (p1 == false)
{
x++;
if (x <= t.Length)
{
goto labelA;
break;
}
}
else
{
x++;
if (x <= t.Length)
{
goto labelB;
break;
}
}
}
}
eulers_number = w2 - wc;
MessageBox.Show(eulers_number.ToString());
}
コンパイル中。私はそのスタイルで使用することは不可能であることを知っているので、コードを修正しようとしましたが、私はここで立ち往生しています。このコードを動作させるにはどうすればよいですか?ここで
C#では、あなたが見つけたような無関係なブロックを入力することはできません。どうしても 'goto'文にまったく依存しない別の例に基づいて実装するのはなぜですか?確かにあなたが見つけたリンクは、インターネット上の唯一の場所ではありません。あなたが見た他のバージョンは何ですか? –
私は1つのアルゴリズムを見つけましたが、それは機能しません。これは私が設立したが実装することができない最高のアルゴリズムです。私はインターネット上で他のソリューションを探していますが、主な問題はプロジェクトを完了するための時間が限られていることです。 – ascc
短い答え - C#でGOTOを使わないでください。それはコードを理解しにくくする。なぜ、各ラベルの下のセクションをメソッドに抽出してみてください。変更しようとしている変数をクラスレベルに移動する必要があります。 –