2011-06-23 13 views
6

Dla mojej pracy domowej dla Gobelinu, muszę pokazać diament na stole z tablicy ciągów. Oto co mam do tej pory:jak narysować diament za pomocą elementu gobelinowego t: pętla

kod 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>"; 
    } 

kod 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> 

Ten kod generuje ten wynik:

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

Poprawna potrzebna jest następująca wartość:

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

Wszelkie pomysły będą bardzo pomocne.

+0

Prawie go przybiłeś, Jedyne, co przegapiłeś, to RowCount - ColCount == numer/2 część, odsyłam moją odpowiedź poniżej. To powinno być dla ciebie jasne. – nikhil

+5

Jestem raczej rozczarowany tymi dwiema odpowiedziami. Nie ze względu na treść, ale ze względu na zasadę .. pytanie wyraźnie mówi "to jest dla mojej pracy domowej", a wy po prostu podałeś kod bez żadnego wyjaśnienia. Ludzie nie będą się uczyć przez kopiowanie/wklejanie kodu. – Coeffect

+0

@Mannimarco Zrobiłem aktualizację, może on spróbować użyć komponentu outputraw, aby spróbować wyświetlić go jako html. Informacje na temat pierwszego planu można znaleźć w google lub na tapestry.org – sfrj

Odpowiedz

2

Wanna narysować diament? Spróbuj tego algorytmu:

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

     } 
} 
} 

UPDATE

Chwileczkę, chcesz stworzyć stronę gobelin, który czerpie że diament prawa gwiazdką?

Jedną z opcji byłoby przy użyciu:.

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

Trzeba tylko ustawić ten ciąg część .java swojej stronie (patrz powyższy kod został zaktualizowany)

Twój wyjścia muszą być świadczone jako html, możesz po prostu użyć algorytmów, które ci daliśmy i wstawić przerwy html zamiast println()

+0

Cześć dzięki za pomoc. muszę użyć składnika pętli i tabeli w tml ... nie outputdraw składnika – dusmanka

0

ten powinien wydrukować wymaganą moc:

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(); 
    } 
    } 
} 
Powiązane problemy