sudoku breaker-java edition

Deducer class:
  1package puzzle;
  2
  3/**
  4 * @author 
  5 * @version 1.0
  6 */

  7public class Deducer
  8{
  9    private int[][] array;
 10    
 11    public Deducer(int[][] array)
 12    {
 13        this.array = new int[9][9];
 14        for(int row = 0; row < 9; row++)
 15        {
 16            for(int column = 0; column < 9; column++)
 17            {
 18                this.array[row][column] = array[row][column];
 19            }

 20        }

 21    }

 22    
 23    private boolean isFinished()
 24    {
 25        for(int row = 0; row < 9; row++)
 26        {
 27            for(int column = 0; column < 9; column++)
 28            {
 29                if(this.array[row][column] == 0)
 30                {
 31                    return false;
 32                }

 33            }

 34        }

 35        return true;
 36    }

 37    
 38    public void deduceAll()
 39    {
 40        if(isFinished())
 41        {
 42            return;
 43        }

 44        for(int row = 0; row < 7; row = row + 3)
 45        {
 46            for(int column = 0; column < 7; column = column + 3)
 47            {
 48                if(reduceFromOneZone(this.array, row, column))
 49                {
 50                    deduceAll();
 51                    return;
 52                }

 53            }

 54        }

 55        for(int row = 0; row < 9; row++)
 56        {
 57            if(reduceFromOneRow(this.array, row))
 58            {
 59                deduceAll();
 60                return;
 61            }

 62        }

 63        for(int column = 0; column < 9; column++)
 64        {
 65            if(reduceFromOneColumn(this.array, column))
 66            {
 67                deduceAll();
 68                return;
 69            }

 70        }

 71        for(int row = 0; row < 7; row = row + 3)
 72        {
 73            if(reduceFromThreeRows(this.array, row, row + 2))
 74            {
 75                deduceAll();
 76                return;
 77            }

 78        }

 79        for(int column = 0; column < 7; column = column + 3)
 80        {
 81            if(reduceFromThreeColumns(this.array, column, column + 2))
 82            {
 83                deduceAll();
 84                return;
 85            }

 86        }

 87    }

 88    
 89    public void deduceOnce()
 90    {
 91        for(int row = 0; row < 7; row = row + 3)
 92        {
 93            for(int column = 0; column < 7; column = column + 3)
 94            {
 95                if(reduceFromOneZone(this.array, row, column))
 96                {
 97                    return;
 98                }

 99            }

100        }

101        for(int row = 0; row < 9; row++)
102        {
103            if(reduceFromOneRow(this.array, row))
104            {
105                return;
106            }

107        }

108        for(int column = 0; column < 9; column++)
109        {
110            if(reduceFromOneColumn(this.array, column))
111            {
112                return;
113            }

114        }

115        for(int row = 0; row < 7; row = row + 3)
116        {
117            if(reduceFromThreeRows(this.array, row, row + 2))
118            {
119                return;
120            }

121        }

122        for(int column = 0; column < 7; column = column + 3)
123        {
124            if(reduceFromThreeColumns(this.array, column, column + 2))
125            {
126                return;
127            }

128        }

129    }

130    
131    private boolean reduceFromOneZone(int[][] array, int row, int column)
132    {
133        int startRow = (row / 3* 3;
134        int startColumn = (column / 3* 3;
135        int[] unknown = new int[9];
136        for(int pointer = 0; pointer < 9; pointer++)
137        {
138            unknown[pointer] = pointer + 1;
139        }

140        for(int rowPointer = startRow; rowPointer < startRow + 3; rowPointer++)
141        {
142            for(int columnPointer = startColumn; columnPointer < startColumn + 3; columnPointer++)
143            {
144                if(array[rowPointer][columnPointer] != 0)
145                {
146                    unknown[array[rowPointer][columnPointer] - 1= 0;
147                }

148            }

149        }

150        for(int digit = 0; digit < 9; digit++)
151        {
152            if(unknown[digit] != 0)
153            {
154                int number = unknown[digit];
155                int posibilities = 0;
156                int rowPosition = -1;
157                int columnPosition = -1;
158                for(int rowPointer = startRow; rowPointer < startRow + 3; rowPointer++)
159                {
160                    for(int columnPointer = startColumn; columnPointer < startColumn + 3; columnPointer++)
161                    {
162                        if(array[rowPointer][columnPointer] == 0)
163                        {
164                            if(isPossibleInThatCellCheckByColumn(array, number,
165                                    rowPointer, columnPointer)
166                                    && isPossibleInThatCellCheckByRow(array,
167                                            number, rowPointer, columnPointer))
168                            {
169                                rowPosition = rowPointer;
170                                columnPosition = columnPointer;
171                                posibilities++;
172                            }

173                        }

174                    }

175                }

176                if(posibilities == 1)
177                {
178                    array[rowPosition][columnPosition] = number;
179                    return true;
180                }

181            }

182        }

183        return false;
184    }

185    
186    private boolean reduceFromOneRow(int[][] array, int row)
187    {
188        int[] unknown = new int[9];
189        for(int column = 0; column < 9; column++)
190        {
191            unknown[column] = column + 1;
192        }

193        for(int column = 0; column < 9; column++)
194        {
195            if(array[row][column] != 0)
196            {
197                unknown[array[row][column] - 1= 0;
198            }

199        }

200        for(int column = 0; column < 9; column++)
201        {
202            if(unknown[column] != 0)
203            {
204                int number = unknown[column];
205                int posibilities = 0;
206                int position = -1;
207                for(int pointer = 0; pointer < 9; pointer++)
208                {
209                    if(array[row][pointer] == 0)
210                    {
211                        if(isPossibleInThatCellCheckByColumnAndZone(array,
212                                number, row, pointer))
213                        {
214                            position = pointer;
215                            posibilities++;
216                        }

217                    }

218                }

219                if(posibilities == 1)
220                {
221                    array[row][position] = number;
222                    return true;
223                }

224            }

225        }

226        return false;
227    }

228    
229    private boolean reduceFromOneColumn(int[][] array, int column)
230    {
231        int[] unknown = new int[9];
232        for(int row = 0; row < 9; row++)
233        {
234            unknown[row] = row + 1;
235        }

236        for(int row = 0; row < 9; row++)
237        {
238            if(array[row][column] != 0)
239            {
240                unknown[array[row][column] - 1= 0;
241            }

242        }

243        for(int row = 0; row < 9; row++)
244        {
245            if(unknown[row] != 0)
246            {
247                int number = unknown[row];
248                int posibilities = 0;
249                int position = -1;
250                for(int pointer = 0; pointer < 9; pointer++)
251                {
252                    if(array[pointer][column] == 0)
253                    {
254                        if(isPossibleInThatCellCheckByRowAndZone(array, number,
255                                pointer, column))
256                        {
257                            position = pointer;
258                            posibilities++;
259                        }

260                    }

261                }

262                if(posibilities == 1)
263                {
264                    array[position][column] = number;
265                    return true;
266                }

267            }

268        }

269        return false;
270    }

271    
272    private boolean isPossibleInThatCellCheckByRowAndZone(int[][] array,
273            int number, int row, int column)
274    {
275        if(!isPossibleInThatCellCheckByRow(array, number, row, column))
276        {
277            return false;
278        }

279        else if(!isPossibleInThatCellCheckByZone(array, number, row, column))
280        {
281            return false;
282        }

283        else if(!canBeInThatZoneCheckByColumn(array, number, row, column))
284        {
285            return false;
286        }

287        else
288        {
289            return true;
290        }

291    }

292    
293    private boolean isPossibleInThatCellCheckByColumnAndZone(int[][] array,
294            int number, int row, int column)
295    {
296        if(!isPossibleInThatCellCheckByColumn(array, number, row, column))
297        {
298            return false;
299        }

300        else if(!isPossibleInThatCellCheckByZone(array, number, row, column))
301        {
302            return false;
303        }

304        else if(!canBeInThatZoneCheckByRow(array, number, row, column))
305        {
306            return false;
307        }

308        else
309        {
310            return true;
311        }

312    }

313    
314    private boolean canBeInThatZoneCheckByRow(int[][] array, int number,
315            int row, int column)
316    {
317        int startRow = (row / 3* 3;
318        int startColumn = (column / 3* 3;
319        for(int rowPointer = startRow; rowPointer < startRow + 3; rowPointer++)
320        {
321            if(rowPointer != row)
322            {
323                if(!isPossibleInThatCellCheckByRow(array, number, rowPointer,
324                        column))
325                {
326                    continue;
327                }

328                boolean canItBe = true;
329                for(int columnPointer = 0; columnPointer < 9; columnPointer++)
330                {
331                    if(columnPointer < startColumn
332                            || columnPointer > startColumn + 2)
333                    {
334                        if(array[rowPointer][columnPointer] == 0)
335                        {
336                            if(isPossibleInThatCellCheckByColumn(array, number,
337                                    rowPointer, columnPointer)
338                                    && isPossibleInThatCellCheckByZone(array,
339                                            number, rowPointer, columnPointer))
340                            {
341                                canItBe = false;
342                            }

343                        }

344                    }

345                }

346                if(canItBe)
347                {
348                    return false;
349                }

350            }

351        }

352        return true;
353    }

354    
355    private boolean canBeInThatZoneCheckByColumn(int[][] array, int number,
356            int row, int column)
357    {
358        int startRow = (row / 3* 3;
359        int startColumn = (column / 3* 3;
360        for(int columnPointer = startColumn; columnPointer < startColumn + 3; columnPointer++)
361        {
362            if(columnPointer != column)
363            {
364                if(!isPossibleInThatCellCheckByColumn(array, number, row,
365                        columnPointer))
366                {
367                    continue;
368                }

369                boolean canItBe = true;
370                for(int rowPointer = 0; rowPointer < 9; rowPointer++)
371                {
372                    if(rowPointer < startRow || rowPointer > startRow + 2)
373                    {
374                        if(array[rowPointer][columnPointer] == 0)
375                        {
376                            if(isPossibleInThatCellCheckByRow(array, number,
377                                    rowPointer, columnPointer)
378                                    && isPossibleInThatCellCheckByZone(array,
379                                            number, rowPointer, columnPointer))
380                            {
381                                canItBe = false;
382                            }

383                        }

384                    }

385                }

386                if(canItBe)
387                {
388                    return false;
389                }

390            }

391        }

392        return true;
393    }

394    
395    private boolean isPossibleInThatCellCheckByZone(int[][] array, int number,
396            int row, int column)
397    {
398        int startRow = (row / 3* 3;
399        int startColumn = (column / 3* 3;
400        for(int rowPointer = startRow; rowPointer < startRow + 3; rowPointer++)
401        {
402            for(int columnPointer = startColumn; columnPointer < startColumn + 3; columnPointer++)
403            {
404                if(array[rowPointer][columnPointer] == number)
405                {
406                    return false;
407                }

408            }

409        }

410        return true;
411    }

412    
413    private boolean reduceFromThreeColumns(int[][] array, int firstColumn,
414            int lastColumn)
415    {
416        int[][] numberAndCount = new int[9][2];
417        int[][] numberAndPosition = new int[27][3];
418        for(int row = 0; row < 9; row++)
419        {
420            numberAndCount[row][0= row + 1;
421            numberAndCount[row][1= 0;
422        }

423        for(int row = 0; row < 27; row++)
424        {
425            for(int column = 0; column < 3; column++)
426            {
427                numberAndPosition[row][column] = 0;
428            }

429        }

430        for(int column = firstColumn; column <= lastColumn; column++)
431        {
432            for(int row = 0; row < 9; row++)
433            {
434                if(array[row][column] != 0)
435                {
436                    numberAndCount[array[row][column] - 1][1]++;
437                    numberAndPosition[9 * (column % 3+ row][0= array[row][column];
438                    numberAndPosition[9 * (column % 3+ row][1= row;
439                    numberAndPosition[9 * (column % 3+ row][2= column;
440                }

441            }

442        }

443        for(int row = 0; row < 9; row++)
444        {
445            if(numberAndCount[row][1== 2)
446            {
447                int number = numberAndCount[row][0];
448                int pointer = 0;
449                int firstAppearanceRowPosition = -1;
450                int firstAppearanceColumnPosition = -1;
451                int secondAppearanceRowPosition = -1;
452                int secondAppearanceColumnPosition = -1;
453                while(pointer < 27)
454                {
455                    if(numberAndPosition[pointer][0== number)
456                    {
457                        firstAppearanceRowPosition = numberAndPosition[pointer][1];
458                        firstAppearanceColumnPosition = numberAndPosition[pointer][2];
459                        pointer++;
460                        break;
461                    }

462                    else
463                    {
464                        pointer++;
465                    }

466                }

467                while(pointer < 27)
468                {
469                    if(numberAndPosition[pointer][0== number)
470                    {
471                        secondAppearanceRowPosition = numberAndPosition[pointer][1];
472                        secondAppearanceColumnPosition = numberAndPosition[pointer][2];
473                        break;
474                    }

475                    else
476                    {
477                        pointer++;
478                    }

479                }

480                int thirdAppearanceColumnPosition = 3
481                        * (firstAppearanceColumnPosition / 3+ 3
482                        - firstAppearanceColumnPosition % 3
483                        - secondAppearanceColumnPosition % 3;
484                int thirdAppearanceRowStartPosition = (3 - firstAppearanceRowPosition / 3 - secondAppearanceRowPosition / 3* 3;
485                int posibilities = 0;
486                int thirdAppearanceRowPosition = -1;
487                for(int indicator = thirdAppearanceRowStartPosition; indicator < thirdAppearanceRowStartPosition + 3; indicator++)
488                {
489                    if(array[indicator][thirdAppearanceColumnPosition] == 0)
490                    {
491                        if(isPossibleInThatCellCheckByRow(array, number,
492                                indicator, thirdAppearanceColumnPosition))
493                        {
494                            thirdAppearanceRowPosition = indicator;
495                            posibilities++;
496                        }

497                    }

498                }

499                if(posibilities == 1)
500                {
501                    array[thirdAppearanceRowPosition][thirdAppearanceColumnPosition] = number;
502                    return true;
503                }

504            }

505        }

506        return false;
507    }

508    
509    private boolean reduceFromThreeRows(int[][] array, int firstRow, int lastRow)
510    {
511        int[][] numberAndCount = new int[2][9];
512        int[][] numberAndPosition = new int[3][27];
513        for(int column = 0; column < 9; column++)
514        {
515            numberAndCount[0][column] = column + 1;
516            numberAndCount[1][column] = 0;
517        }

518        for(int row = 0; row < 3; row++)
519        {
520            for(int column = 0; column < 27; column++)
521            {
522                numberAndPosition[row][column] = 0;
523            }

524        }

525        for(int row = firstRow; row <= lastRow; row++)
526        {
527            for(int column = 0; column < 9; column++)
528            {
529                if(array[row][column] != 0)
530                {
531                    numberAndCount[1][array[row][column] - 1]++;
532                    numberAndPosition[0][9 * (row % 3+ column] = array[row][column];
533                    numberAndPosition[1][9 * (row % 3+ column] = row;
534                    numberAndPosition[2][9 * (row % 3+ column] = column;
535                }

536            }

537        }

538        for(int column = 0; column < 9; column++)
539        {
540            if(numberAndCount[1][column] == 2)
541            {
542                int number = numberAndCount[0][column];
543                int pointer = 0;
544                int firstAppearanceRowPosition = -1;
545                int firstAppearanceColumnPosition = -1;
546                int secondAppearanceRowPosition = -1;
547                int secondAppearanceColumnPosition = -1;
548                while(pointer < 27)
549                {
550                    if(numberAndPosition[0][pointer] == number)
551                    {
552                        firstAppearanceRowPosition = numberAndPosition[1][pointer];
553                        firstAppearanceColumnPosition = numberAndPosition[2][pointer];
554                        pointer++;
555                        break;
556                    }

557                    else
558                    {
559                        pointer++;
560                    }

561                }

562                while(pointer < 27)
563                {
564                    if(numberAndPosition[0][pointer] == number)
565                    {
566                        secondAppearanceRowPosition = numberAndPosition[1][pointer];
567                        secondAppearanceColumnPosition = numberAndPosition[2][pointer];
568                        break;
569                    }

570                    else
571                    {
572                        pointer++;
573                    }

574                }

575                int thirdAppearanceRowPosition = 3
576                        * (firstAppearanceRowPosition / 3+ 3
577                        - firstAppearanceRowPosition % 3
578                        - secondAppearanceRowPosition % 3;
579                int thirdAppearanceColumnStartPosition = (3 - firstAppearanceColumnPosition / 3 - secondAppearanceColumnPosition / 3* 3;
580                int posibilities = 0;
581                int thirdAppearanceColumnPosition = -1;
582                for(int indicator = thirdAppearanceColumnStartPosition; indicator < thirdAppearanceColumnStartPosition + 3; indicator++)
583                {
584                    if(array[thirdAppearanceRowPosition][indicator] == 0)
585                    {
586                        if(isPossibleInThatCellCheckByColumn(array, number,
587                                thirdAppearanceRowPosition, indicator))
588                        {
589                            thirdAppearanceColumnPosition = indicator;
590                            posibilities++;
591                        }

592                    }

593                }

594                if(posibilities == 1)
595                {
596                    array[thirdAppearanceRowPosition][thirdAppearanceColumnPosition] = number;
597                    return true;
598                }

599            }

600        }

601        return false;
602    }

603    
604    private boolean isPossibleInThatCellCheckByColumn(int[][] array,
605            int number, int row, int column)
606    {
607        for(int pointer = 0; pointer < 9; pointer++)
608        {
609            if(pointer != row)
610            {
611                if(array[pointer][column] == number)
612                {
613                    return false;
614                }

615            }

616        }

617        return true;
618    }

619    
620    private boolean isPossibleInThatCellCheckByRow(int[][] array, int number,
621            int row, int column)
622    {
623        for(int pointer = 0; pointer < 9; pointer++)
624        {
625            if(pointer != column)
626            {
627                if(array[row][pointer] == number)
628                {
629                    return false;
630                }

631            }

632        }

633        return true;
634    }

635    
636    /**
637     * Class attribute getter
638     * 
639     * @return the array
640     */

641    public int[][] getArray()
642    {
643        return this.array;
644    }

645}

646

puzzle.jsp:
  1<%@ page language="java" contentType="text/html; charset=utf8"%>
  2<%@ page import="puzzle.*"%>
  3<%
  4if(request.getParameter("type")!=null)
  5{
  6    try
  7    {
  8        String array=request.getParameter("array");
  9        String[] numbers=array.split(",");
 10        int[][] dealingArray=new int[9][9];
 11        for(int row=0;row<9;row++)
 12        {
 13            for(int column=0;column<9;column++)
 14            {
 15                dealingArray[row][column]=Integer.parseInt(numbers[row*9+column]);
 16            }
 17        }
 18        Deducer deducer=new Deducer(dealingArray);
 19        if(request.getParameter("type").equals("OneStep"))
 20        {
 21            deducer.deduceOnce();
 22        }
 23        else if(request.getParameter("type").equals("AllSteps"))
 24        {
 25            deducer.deduceAll();
 26        }
 27        StringBuilder sb=new StringBuilder();
 28        for(int row=0;row<9;row++)
 29        {
 30            for(int column=0;column<9;column++)
 31            {
 32                if(sb.toString().equals(""))
 33                {
 34                    sb.append(deducer.getArray()[row][column]);
 35                }
 36                else
 37                {
 38                    sb.append(","+deducer.getArray()[row][column]);
 39                }
 40            }
 41        }
 42        out.println(sb);
 43    }
 44    catch(Exception e)
 45    {
 46        out.println("ri");
 47    }
 48    return;
 49}
 50
%>
 51<html>
 52<body>
 53<script>
 54var request=false;
 55try
 56{
 57    request = new XMLHttpRequest();//Firefox
 58}

 59catch(trymicrosoft)
 60{
 61    try 
 62      {
 63            request = new ActiveXObject("Msxml2.XMLHTTP.5.0");//New IE
 64      }
 
 65      catch(othermicrosoft)
 66      {
 67            try 
 68            {
 69                  request = new ActiveXObject("Microsoft.XMLHTTP");//Old IE
 70            }
 
 71            catch(failed)
 72            {
 73                  request = false;//Unknown browser
 74            }

 75     }

 76}

 77if(!request)
 78{
 79  alert("Please use Internet Explorer");
 80}

 81function dealNullInput(input)
 82{
 83    if(input=="")
 84    {
 85        return "0";
 86    }

 87    else
 88    {
 89        return input;
 90    }

 91}

 92function dealZeroOutput(input)
 93{
 94    if(input==0)
 95    {
 96        return "";
 97    }

 98    else
 99    {
100        return input;
101    }

102}

103function sendOneStepRequest()
104{
105  url=escape("puzzle.jsp")+"?random=" + Math.random();//use a random number to avoid cache
106  request.open("POST",url,true);//connection method
107  request.onreadystatechange=showProcess;//show Process method
108  request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');
109  var array="";
110  for(var i=0;i<81;i++)
111  {
112    if(array=="")
113    {
114        array=array+dealNullInput(document.getElementsByName("TextBox")[i].value);
115    }

116    else
117    {
118        array=array+","+dealNullInput(document.getElementsByName("TextBox")[i].value);
119    }

120  }

121  request.send("type=OneStep"+"&array="+escape(array));
122}

123function sendAllStepsRequest()
124{
125  url=escape("puzzle.jsp")+"?random=" + Math.random();
126  request.open("POST",url,true);//connection method
127  request.onreadystatechange=showProcess;//show Process method
128  request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');
129  var array="";
130  for(var i=0;i<81;i++)
131  {
132    if(array=="")
133    {
134        array=array+dealNullInput(document.getElementsByName("TextBox")[i].value);
135    }

136    else
137    {
138        array=array+","+dealNullInput(document.getElementsByName("TextBox")[i].value.replace(/ /g, ""));
139    }

140  }

141  request.send("type=AllSteps"+"&array="+escape(array));
142}

143function showProcess() 
144{
145   if(request.readyState == 4)//finished
146   {
147        if(request.status == 200)//normal
148        {
149        var splitResult=request.responseText.split(",");
150        for(var i=0;i<81;i++)
151            {
152        document.getElementsByName("TextBox")[i].value=dealZeroOutput(splitResult[i]);
153           }

154        }

155   }

156   else if(request.readyState == 1)
157   {
158        //"finished step1";
159   }

160   else if(request.readyState == 2)
161   {
162        //"finished step2";
163   }

164   else if(request.readyState == 3)
165   {
166        //"finished step3";
167   }

168}

169
</script>
170<table>
171<tr>
172<td>
173<input name="TextBox" type="text" style="width: 25px"/>
174</td>
175<td>
176<input name="TextBox" type="text" style="width: 25px"/>
177</td>
178<td>
179<input name="TextBox" type="text" style="width: 25px"/>
180</td>
181<td>
182<input name="TextBox" type="text" style="width: 25px"/>
183</td>
184<td>
185<input name="TextBox" type="text" style="width: 25px"/>
186</td>
187<td>
188<input name="TextBox" type="text" style="width: 25px"/>
189</td>
190<td>
191<input name="TextBox" type="text" style="width: 25px"/>
192</td>
193<td>
194<input name="TextBox" type="text" style="width: 25px"/>
195</td>
196<td>
197<input name="TextBox" type="text" style="width: 25px"/>
198</td>
199</tr>
200<tr>
201<td>
202<input name="TextBox" type="text" style="width: 25px"/>
203</td>
204<td>
205<input name="TextBox" type="text" style="width: 25px"/>
206</td>
207<td>
208<input name="TextBox" type="text" style="width: 25px"/>
209</td>
210<td>
211<input name="TextBox" type="text" style="width: 25px"/>
212</td>
213<td>
214<input name="TextBox" type="text" style="width: 25px"/>
215</td>
216<td>
217<input name="TextBox" type="text" style="width: 25px"/>
218</td>
219<td>
220<input name="TextBox" type="text" style="width: 25px"/>
221</td>
222<td>
223<input name="TextBox" type="text" style="width: 25px"/>
224</td>
225<td>
226<input name="TextBox" type="text" style="width: 25px"/>
227</td>
228</tr>
229<tr>
230<td>
231<input name="TextBox" type="text" style="width: 25px"/>
232</td>
233<td>
234<input name="TextBox" type="text" style="width: 25px"/>
235</td>
236<td>
237<input name="TextBox" type="text" style="width: 25px"/>
238</td>
239<td>
240<input name="TextBox" type="text" style="width: 25px"/>
241</td>
242<td>
243<input name="TextBox" type="text" style="width: 25px"/>
244</td>
245<td>
246<input name="TextBox" type="text" style="width: 25px"/>
247</td>
248<td>
249<input name="TextBox" type="text" style="width: 25px"/>
250</td>
251<td>
252<input name="TextBox" type="text" style="width: 25px"/>
253</td>
254<td>
255<input name="TextBox" type="text" style="width: 25px"/>
256</td>
257</tr>
258<tr>
259<td>
260<input name="TextBox" type="text" style="width: 25px"/>
261</td>
262<td>
263<input name="TextBox" type="text" style="width: 25px"/>
264</td>
265<td>
266<input name="TextBox" type="text" style="width: 25px"/>
267</td>
268<td>
269<input name="TextBox" type="text" style="width: 25px"/>
270</td>
271<td>
272<input name="TextBox" type="text" style="width: 25px"/>
273</td>
274<td>
275<input name="TextBox" type="text" style="width: 25px"/>
276</td>
277<td>
278<input name="TextBox" type="text" style="width: 25px"/>
279</td>
280<td>
281<input name="TextBox" type="text" style="width: 25px"/>
282</td>
283<td>
284<input name="TextBox" type="text" style="width: 25px"/>
285</td>
286</tr>
287<tr>
288<td>
289<input name="TextBox" type="text" style="width: 25px"/>
290</td>
291<td>
292<input name="TextBox" type="text" style="width: 25px"/>
293</td>
294<td>
295<input name="TextBox" type="text" style="width: 25px"/>
296</td>
297<td>
298<input name="TextBox" type="text" style="width: 25px"/>
299</td>
300<td>
301<input name="TextBox" type="text" style="width: 25px"/>
302</td>
303<td>
304<input name="TextBox" type="text" style="width: 25px"/>
305</td>
306<td>
307<input name="TextBox" type="text" style="width: 25px"/>
308</td>
309<td>
310<input name="TextBox" type="text" style="width: 25px"/>
311</td>
312<td>
313<input name="TextBox" type="text" style="width: 25px"/>
314</td>
315</tr>
316<tr>
317<td>
318<input name="TextBox" type="text" style="width: 25px"/>
319</td>
320<td>
321<input name="TextBox" type="text" style="width: 25px"/>
322</td>
323<td>
324<input name="TextBox" type="text" style="width: 25px"/>
325</td>
326<td>
327<input name="TextBox" type="text" style="width: 25px"/>
328</td>
329<td>
330<input name="TextBox" type="text" style="width: 25px"/>
331</td>
332<td>
333<input name="TextBox" type="text" style="width: 25px"/>
334</td>
335<td>
336<input name="TextBox" type="text" style="width: 25px"/>
337</td>
338<td>
339<input name="TextBox" type="text" style="width: 25px"/>
340</td>
341<td>
342<input name="TextBox" type="text" style="width: 25px"/>
343</td>
344</tr>
345<tr>
346<td>
347<input name="TextBox" type="text" style="width: 25px"/>
348</td>
349<td>
350<input name="TextBox" type="text" style="width: 25px"/>
351</td>
352<td>
353<input name="TextBox" type="text" style="width: 25px"/>
354</td>
355<td>
356<input name="TextBox" type="text" style="width: 25px"/>
357</td>
358<td>
359<input name="TextBox" type="text" style="width: 25px"/>
360</td>
361<td>
362<input name="TextBox" type="text" style="width: 25px"/>
363</td>
364<td>
365<input name="TextBox" type="text" style="width: 25px"/>
366</td>
367<td>
368<input name="TextBox" type="text" style="width: 25px"/>
369</td>
370<td>
371<input name="TextBox" type="text" style="width: 25px"/>
372</td>
373</tr>
374<tr>
375<td>
376<input name="TextBox" type="text" style="width: 25px"/>
377</td>
378<td>
379<input name="TextBox" type="text" style="width: 25px"/>
380</td>
381<td>
382<input name="TextBox" type="text" style="width: 25px"/>
383</td>
384<td>
385<input name="TextBox" type="text" style="width: 25px"/>
386</td>
387<td>
388<input name="TextBox" type="text" style="width: 25px"/>
389</td>
390<td>
391<input name="TextBox" type="text" style="width: 25px"/>
392</td>
393<td>
394<input name="TextBox" type="text" style="width: 25px"/>
395</td>
396<td>
397<input name="TextBox" type="text" style="width: 25px"/>
398</td>
399<td>
400<input name="TextBox" type="text" style="width: 25px"/>
401</td>
402</tr>
403<tr>
404<td>
405<input name="TextBox" type="text" style="width: 25px"/>
406</td>
407<td>
408<input name="TextBox" type="text" style="width: 25px"/>
409</td>
410<td>
411<input name="TextBox" type="text" style="width: 25px"/>
412</td>
413<td>
414<input name="TextBox" type="text" style="width: 25px"/>
415</td>
416<td>
417<input name="TextBox" type="text" style="width: 25px"/>
418</td>
419<td>
420<input name="TextBox" type="text" style="width: 25px"/>
421</td>
422<td>
423<input name="TextBox" type="text" style="width: 25px"/>
424</td>
425<td>
426<input name="TextBox" type="text" style="width: 25px"/>
427</td>
428<td>
429<input name="TextBox" type="text" style="width: 25px"/>
430</td>
431</tr>
432</table>
433<input type="button" name="OneStep" value="OneStep" id="OneStep" onclick="sendOneStepRequest()" />
434<input type="button" name="AllSteps" value="AllSteps" id="AllSteps" onclick="sendAllStepsRequest()" />
435</body>
436</html>
posted @ 2007-08-29 09:19  N/A2011  阅读(363)  评论(0编辑  收藏  举报