2011-06-23 38 views
6

Đối với bài tập về nhà của tôi cho Tapestry, tôi phải hiển thị một viên kim cương trên bàn từ mảng chuỗi. Dưới đây là những gì tôi có cho đến nay:Làm thế nào để vẽ kim cương bằng cách sử dụng thành phần tấm thảm t: loop

đang 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>"; 
    } 

mã của 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> 

Mã này tạo ra sản lượng này:

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

Các đúng sản lượng tôi cần là:

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

Bất kỳ ý tưởng nào cũng sẽ hữu ích.

+0

Bạn gần như đóng đinh nó, Điều duy nhất bạn bỏ qua là RowCount - ColCount == number/2 một phần, hãy tham khảo câu trả lời của tôi bên dưới. Nó sẽ được rõ ràng cho bạn ở đó. – nikhil

+5

Tôi khá thất vọng về hai câu trả lời. Không phải vì nội dung, nhưng vì nguyên tắc .. câu hỏi rõ ràng nói "đây là bài tập về nhà của tôi" và các bạn chỉ đưa ra mã mà không có bất kỳ lời giải thích nào. Mọi người sẽ không học bằng cách sao chép/dán mã của bạn. – Coeffect

+0

@Mannimarco Tôi đã cập nhật, anh ấy có thể thử sử dụng thành phần outputraw để thử hiển thị dưới dạng html. Thông tin Fore có thể được tìm thấy trong google hoặc tại tapestry.org – sfrj

Trả lời

2

Wanna vẽ một viên kim cương? Hãy thử thuật toán này:

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\/>"; 

     } 
} 
} 

CẬP NHẬT

Chờ một thứ hai, bạn muốn tạo một trang thảm, mà rút ra rằng kim cương của dấu hoa thị phải không?

Một lựa chọn sẽ được sử dụng:.

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

Bạn chỉ cần thiết lập rằng chuỗi phần java của trang của bạn (Xem mã trên đã được cập nhật)

đầu ra của bạn cần phải được trả lại dưới dạng html, bạn chỉ có thể sử dụng các thuật toán mà chúng tôi đã cung cấp cho bạn và chèn ngắt html thay vì println()

+0

xin cảm ơn sự giúp đỡ. tôi phải sử dụng thành phần vòng lặp và bảng trong tml ... không phải thành phần outputdraw – dusmanka

0

này nên in đầu ra yêu cầu:

public class Diamond 
{ 
    public static void main(String []args) 
    { 
    for(int i=0;i<9;i++){ 
     for(int j=0;j<9;j++) 
     if((i + j == 4) || (i-j == 4)||(i+j == 12) || (j-i == 4)) 
      System.out.print("*"); 
     else 
      System.out.print("-"); 
     System.out.println(); 
    } 
    } 
} 
Các vấn đề liên quan