如何把这个段代码不改变意思 更改成一个跟为简便的方法

如何将这个代码更改成一个跟为简单的形式

public void fillPuzzle(int numOfNumbers, int numOfConstraints)
throws IllegalArgumentException{
final int quad = (int)Math.pow(size, 2);
final int quadC = quad - size;
ArrayList list = new ArrayList();
TreeSet rec = new TreeSet();

    if (numOfNumbers > Math.pow(grid.length, 2)) 
        throw new IllegalArgumentException("numOfNumbers exceeded table "
                + "size (" + quad + "). Found: " + numOfNumbers );
    else if (numOfNumbers < 0)
        throw new IllegalArgumentException("numOfNumbers can not be "
                + "negative. Found:" + numOfNumbers );
    if (numOfConstraints > (quadC * 2))
        throw new IllegalArgumentException("numOfConstraints exceeded "
                + "table size (" + (quadC * 2) + "). Found: " 
                + numOfConstraints);
    else if (numOfConstraints < 0)
        throw new IllegalArgumentException("numOfConstraints can not be "
                + "negative. Found:" + numOfConstraints );


    /* Fill the grid legally using Random. */
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            for (int k = 0; k < j; k++) {
                rec.add(grid[i][k].get() - 1);
            }
            for (int k = 0; k < size; k++) {
                if (!rec.contains(k)) {list.add(k);}
            }
            for (int k = 0; k < i; k++) {
                list.remove(new Integer(grid[k][j].get() - 1));
            }
            if (!list.isEmpty()) {
                int r = list.get(rdm.nextInt(list.size()));
                setSquare(i, j, r + 1);
                rec.add(r);
            } else {
                j = -1;
                rec.clear();
            }
            list.clear();
        }
        rec.clear();
    }
    if (!isLegal()) {
        fillPuzzle();
        return;

分为业务抽离和算法抽离。
首先你要分析自己的业务场景,尤其是算法,看看是否可以精简。而不是这种不断的for循环。