java - 如何使用 Tapestry 组件绘制钻石 t :loop

标签 java algorithm math tapestry

对于我的 Tapestry 作业,我必须从字符串数组中在 table 上显示一颗钻石。这是我到目前为止所拥有的:

代码Index.java

  public class Index
    {
        @Property
        private Integer number;

        @Property
        private String [] table; 

        public Index() {
            number = 9;
            int temp = 0;

            String tmp = "-";
            table = new String[number * number];

            if(singleCell == null)
                singleCell="";

            for (int i = 0; i <  number; i++) {
                for (int j = 0; j <  number; j++) {
                    table[temp] = tmp;
                    temp++;
                }               
            }
        }

        @OnEvent(component="diamond")
        Object onDiamondLink() {
            String swapValue = "*";

            int  sum = number / 2 ;

            int x1 = number-1;

            int sumY = number / 2;

            int y1 = number+1;

            int temp = x1 + sumY;

            for (int i = 0; i < table.length; i++) {
                table[i] = "-";
            }

            for (int i = 0; i < table.length; i++) {
                if( i == sum) {
                    table[i] = swapValue;
                    sum = sum + x1;
                }
                if ( i == sumY ) {
                    table[i] = swapValue;
                    sumY = sumY + y1;
                } 
            }   

            System.out.println("link diamond is activate");
            return null;
        }
 public boolean isStartRow(){
         return (myIndex%9 ==0);
     }

     public boolean isEndRow(){
         return (myIndex%9 == 8);
     }

     public String getStartTR(){
         return "<tr >";
     }

     public String getEndTR(){
         return "</tr>";
    }

index.tml代码:

<t:actionlink t:id="diamond" >Diamond  table</t:actionlink>
            <br/>



         <h1>Result:</h1>

        <table border="1" >
            <t:loop t:source="table" t:value="singleCell" index="MyIndex">
                <t:if test="startRow">
                 <t:outputraw  value="startTR"/>
                </t:if>
                <td width="20px">
                    ${singleCell}
                </td>
            <t:if test="endRow">
                   <t:outputraw value="endTR"/>
           </t:if> 
            </t:loop>
        </table>

此代码生成此输出:

-   -   -   -   *   -   -   -   -
-   -   -   *   -   *   -   -   -
-   -   *   -   -   -   *   -   -
-   *   -   -   -   -   -   *   -
*   -   -   -   -   -   -   -   *
-   -   -   -   -   -   -   *   -
*   -   -   -   -   -   *   -   -
-   *   -   -   -   *   -   -   -
-   -   *   -   *   -   -   -   -

我需要的正确输出是这样的:

-   -   -   -   *   -   -   -   -
-   -   -   *   -   *   -   -   -
-   -   *   -   -   -   *   -   -
-   *   -   -   -   -   -   *   -
*   -   -   -   -   -   -   -   *
-   *   -   -   -   -   -   *   -
-   -   *   -   -   -   *   -   -
-   -   -   *   -   *   -   -   -
-   -   -   -   *   -   -   -   -

任何想法都会有很大的帮助。

最佳答案

想画钻石吗?试试这个算法:

public class Diamond {

    @Property
    @Persist
    private String diamond;


    @SetupRender    
    init(){
         int n,i,j,k;

     do {  

      n = (int)(Math.random() * 10 + 3); 

      }while(n % 2 == 0);

      diamond += ""+n+"<br\/>";

      System.out.println();   

     for (i = 1; i <= n; i++){

        for (k = n; k > i; k--)
          diamond += "-";

        for (j =1; j <= i; j++)
             diamond += "*"+"-";


       diamond += "<br\/>";

        }

     for (i = n; i > 0; i--){

        for (k = n; k > i; k--)
          diamond += "-";

        for (j =1; j <= i; j++)
               diamond += "*"+"-";

              diamond += "<br\/>";

        }
}
}

更新

等一下,您想创建一个 Tapestry 页面,绘制星号菱形对吗?

一个选项是使用:

<t:outputraw value="${diamond}"/>

您只需要在页面的 .java 部分设置该字符串。(请参阅上面的代码已更新)

你的输出需要呈现为 html,你可以只使用我们给你的算法并插入 html 中断而不是 println()

关于java - 如何使用 Tapestry 组件绘制钻石 t :loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6457786/

相关文章:

java - 重置游戏循环/重新启动游戏 java swing

c# - 如果小数部分为零,如何隐藏它?

c++ - 移动一组共面点的简单程序不起作用

java - 尝试制作图形计算器,在线程 "AWT-EventQueue-0"java.lang.StackOverflowError 中收到异常

Java - 将 Yaml 解析为 Json

java - JavaMail 1.4支持哪个版本的TLS?

java - 在 Java 中拆分字符串

java - 除大整数以获得精确值

algorithm - 这个算法的效率是多少

c++ - 使用 std::find 在 std::map 中进行不区分大小写的搜索