Умная 5x5 сетка алфавитов в C # - PullRequest
3 голосов
/ 10 февраля 2011

Я должен напечатать таблицу 5х5 с алфавитами, например:

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

Теперь вопрос в том, что я могу сделать, чтобы связать i И j, чтобы получить их в диапазоне 65-87? (A-W, поскольку это сетка 5x5, я пропущу последнюю итерацию и вручную добавлю YZ в одну td) .

Я пытался (i*10 + j) + 54) (да, я не знаю, о чем я думал) , но это не работает.

Это может быть ЧРЕЗВЫЧАЙНО глупый вопрос, извините, но как это можно сделать с помощью вложенных циклов for? Или есть другой способ получше? Я спрашиваю, потому что мне очень любопытно узнать больше (и глупо, что я уже не знаю).

Ответы [ 5 ]

5 голосов
/ 10 февраля 2011

Как насчет простого введения переменной char letter = 'A'; вне ваших циклов?

Затем, после ее использования, вызовите letter++;, чтобы перейти к следующей букве в алфавите.

Это будеттакже сделайте вашу программу более читабельной и не заставит других программистов видеть некоторые вычисления, включая i и j, которые заканчиваются буквой.

Простота часто является лучшим решением:)

2 голосов
/ 10 февраля 2011
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");
}
1 голос
/ 10 февраля 2011

Я говорю, перейдите к предложенной простой опции 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();

Обратите внимание на троичный оператор, чтобы последние несколько ячеек были пустыми, а не специальными символами.

1 голос
/ 10 февраля 2011

Используйте индексы на основе нуля для i и j, а затем формулу:

 int x = (i*5) + j + 65;
 if (x<=87)
     printCharacter(x);
0 голосов
/ 10 февраля 2011

Если бы вы могли выводить их как плавающие элементы div внутри контейнера, а не как ячейки таблицы, вы могли бы затем использовать элемент управления повторителем на внешнем интерфейсе (содержащий один плавающий элемент div) и связать ретранслятор с массивом необходимых вам букв.(также заботится о Y и Z).

...