For my homework for Tapestry, I have to show a diamond on table from array of strings. Here's what I have so far:
code 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>";
}
code of 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>
This code generates this output:
- - - - * - - - -
- - - * - * - - -
- - * - - - * - -
- * - - - - - * -
* - - - - - - - *
- - - - - - - * -
* - - - - - * - -
- * - - - * - - -
- - * - * - - - -
The correct output I need is this:
- - - - * - - - -
- - - * - * - - -
- - * - - - * - -
- * - - - - - * -
* - - - - - - - *
- * - - - - - * -
- - * - - - * - -
- - - * - * - - -
- - - - * - - - -
Any ideas will be great help.
Wanna draw a diamond? Try this algorithm:
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
Wait a second, you want to create A tapestry page, that draws that diamond of asterisk right?
One option would be using:
<t:outputraw value="${diamond}"/>
You just need to set that String the .java part of your page.(See the above code was updated)
Your output need to be rendered as html, you can just use the algorithms we gave you and insert html breaks instead of println()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With