3

次のように、アルファベットを含む5x5の表を印刷する必要があります。

<table>
 <tr> <td>A</td> <td>B</td> <td>C</td> <td>D</td> <td>D</td>

など。文字は実際にはリンクであるため、次のようになります。

<td> <a href='/someplace'>A</a> </td>

これらのリンクは頻繁に変更される傾向があり、かなりの数のページに表示されるため、ハードコーディングして置き換えることは好きではありません。そこで、構造全体を出力する関数を書こうと思いました。

はい、それは非常に簡単です。forループを次のように動作させます。

  StringBuilder alphabets = new StringBuilder("<table class='table'>");
  for(int i=65; i<=87; i++)
  {
      //Do stuff here to calculate if i mod 5 is zero and add <tr> accordingly.
      //Use Convert.ToChar(i); to get the wanted structure.
  }

それからそれは私を襲いました、私はおそらくネストされたforループを使用してより良い「賢い」方法でそれを行うことができました、

for(i=1; i<=5; i++)
{
    alpbahets.Append("<tr>")
    for(j=1; j<5; j++)
    {
        //Get the <a > link string here.
    }
    alphabets.Append("</tr");
}

iここで問題となるのは、それらを65〜87jの範囲に収めるために 、何を関連付けることができるかということです。(AW、5x5グリッドなので、最後の反復をスキップして手動で1つ追加YZしますtd

試しましたが(i*10 + j) + 54) (ええ、何を考えていたのかわかりません)、うまくいきません。

これは非常に愚かな質問かもしれませんが、申し訳ありませんが、ネストされたforループでこれを行う方法は何ですか?それとも他にもっと良い方法はありますか?私はもっ​​と知りたいと思っているので(そして私がすでに知らないのはばかげているので)尋ねています。

4

5 に答える 5

5

char letter = 'A';ループの外側に変数を導入するだけではどうですか?

それを使用した後letter++;、アルファベットの次の文字に移動するために呼び出します。

これにより、プログラムが読みやすくなり、他のプログラマーに i と j を含む何らかの計算が文字として表示されることを強要しなくなります。

多くの場合、シンプルさが最善の解決策です:)

于 2011-02-10T11:51:22.033 に答える
2
for(i=0; i<5; i++)
{
  alpbahets.Append("<tr>")
  for(j=0; j<5; j++)
  {
        int val = 65 + i*5 +j;
        //get the <a > link string here
  }
  alphabets.Append("</tr");
}
于 2011-02-10T11:52:13.847 に答える
1

すでに提案されている単純な char オプションを使用すると言います。

これは、私がこれまでに書いた中で最も読みやすいコードではありませんが、このようなループでも実行できるということです。

StringBuilder alphabets = new StringBuilder("<table class='table'>"); 
for(int i=0; i<=5; i++)
{
  alphabets.Append("<tr>\n");
  for(int j=0; j<5; j++)
  {
        alphabets.Append("<td><a href=\""+"linkGoesHere"+"\">"+ (65+i*5+j<91?Convert.ToChar(65+i*5+j):' ') +"</a></td>\n");
  }
  alphabets.Append("</tr>");
}
alphabets.ToString().Dump();

最後の数セルが特殊文字ではなく空白になるように、三項演算子に注意してください。

于 2011-02-10T12:06:45.023 に答える
1

i と j にゼロから始まるインデックスを使用し、次の式を使用します。

 int x = (i*5) + j + 65;
 if (x<=87)
     printCharacter(x);
于 2011-02-10T11:52:17.460 に答える
0

これらをテーブル セルとしてではなく、コンテナー内のフローティング div として出力できる場合は、フロント エンド (単一のフローティング div を含む) でリピーター コントロールを使用し、必要な文字の配列にリピーターをバインドできます (注意してください)。 Y と Z も同様)。

于 2011-02-10T11:53:03.780 に答える