我必须在其中打印一个带有字母的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
和j
以使它们达到65-87的范围?
(A-W,因为它是5x5网格,我将跳过最后一次迭代,并在一个YZ
中手动添加td
)。
我试过(i*10 + j) + 54)
(是的,我不知道我在想什么),但它不起作用。
这可能是一个非常愚蠢的问题,抱歉,但是在嵌套for
循环中完成此操作的方法是什么?或者还有其他更好的方法吗?我在问,因为我很想知道更多(而且我已经不知道了)。
答案 0 :(得分:5)
如果只在你的循环中引入变量char letter = 'A';
呢?
然后在使用它之后,调用letter++;
移动到alphabeth中的下一个字母。
这将使您的程序更具可读性,并且不会强迫其他程序员看到一些计算,包括以字母结尾的i和j。
简单通常是最好的解决方案:)
答案 1 :(得分: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");
}
答案 2 :(得分:1)
对i和j使用基于零的索引,然后使用公式:
int x = (i*5) + j + 65;
if (x<=87)
printCharacter(x);
答案 3 :(得分: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();
注意三元运算符以确保最后几个单元格是空白而不是特殊字符。
答案 4 :(得分:0)
如果您可以将这些作为浮动div输出到容器内而不是作为表格单元格,则可以在前端使用转发器控件(包含单个浮动div)并将转发器绑定到所需字母的数组(照顾Y和Z)。