当前位置: 代码迷 >> J2SE >> 这部份怎完成?
  详细解决方案

这部份怎完成?

热度:142   发布时间:2016-04-24 02:19:00.0
这部份怎完成????求助。。


Java code
public class Test2 {    public static void main(String args []){        //Define Variable        Scanner scan=new Scanner(System.in);        final int SIZE=6;        int[][] num=new int[SIZE][SIZE];                        //Prompt for input        System.out.println("Enter the initial Grid: ");        for(int i = 0; i < num.length; i++){            for(int j = 0; j < 6; j++){                num[j]=scan.nextInt();            }        }             //Display Before        System.out.println("\n"+"Before:");        for(int i = num.length-1; i >= 0; i--){            System.out.print(i+": ");            for(int j = 0; j < SIZE; j++){                System.out.print(num[j] +" ");            }            System.out.println();        }        System.out.print("   ");        for(int k = 1; k <= 11; k++){System.out.print("=");}        System.out.print("\n"+"   ");        for(int k = 0; k <= 5; k++){System.out.print(k+" ");}        System.out.println("\n");                //Display After        for(int i = num.length-1; i >= 0; i--){          System.out.print(i+": ");          for(int j = 0; j < SIZE; j++){        ..................................................            .................这部份怎完成.....................            ..................................................                                        //印X                if(num[i][j] == -1){                    System.out.print("X ");                    continue;                }else{                    System.out.print(num[i][j]+" ");                }                      }          System.out.println();    }    System.out.print("   ");    for(int k = 1; k <= 11; k++){System.out.print("=");}    System.out.print("\n"+"   ");    for(int k = 0; k <= 5; k++){System.out.print(k+" ");}    System.out.println("\n");      }            }


注:不使用类方法 ,还不懂

------解决方案--------------------
你这个应该是对对碰或者ls说的玛丽医生的算法吧。
我帮你写了一个,你看看怎么样。效率可能有点低,你自己优化一下吧~
注释写得比较详细了,你应该能看懂。
如果有语法元素不清楚的话就去查查书吧。
总之要明白:Java的数组都是对象,无论是几维的。
Java code
package com;import java.io.File;import java.io.FileNotFoundException;import java.util.ArrayList;import java.util.Scanner;public class Test2 {    enum Direct{UP, DOWN, LEFT, RIGHT};//一个枚举量,用来表示方向    static final int MIN_CELL_SIZE = 3;//常量,表示至少连续多少个        public static void main(String args[]) {        // Define Variable//        Scanner scan = new Scanner(System.in);        //读文件更便于测试,这里暂时改成了读文件。文件里即要找的那个矩阵        Scanner scan = null;        try {            scan = new Scanner(new File("data/matrix.txt"));        } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        final int SIZE = 6;        int[][] num = new int[SIZE][SIZE];        // Prompt for input        System.out.println("Enter the initial Grid: ");        for (int i = 0; i < num.length; i++) {            for (int j = 0; j < 6; j++) {                num[i][j] = scan.nextInt();            }        }                // Display Before        System.out.println("\n" + "Before:");        for (int i = num.length - 1; i >= 0; i--) {            System.out.print(i + ": ");            for (int j = 0; j < SIZE; j++) {                System.out.print(num[i][j] + " ");            }            System.out.println();        }                System.out.print("   ");        for (int k = 1; k <= 11; k++) {            System.out.print("=");        }        System.out.print("\n" + "   ");        for (int k = 0; k <= 5; k++) {            System.out.print(k + " ");        }        System.out.println("\n");        //添加的函数,用来找出符合条件的单元        ArrayList<MatchingCell> cellList = findMatchingCells(num);                //添加的函数,设置相应的值        setValue(num, cellList);                // Display After        System.out.println("\n" + "After:");        for (int i = num.length - 1; i >= 0; i--) {            System.out.print(i + ": ");            for (int j = 0; j < SIZE; j++) {                // 印X                if (num[i][j] == -1) {                    System.out.print("X ");                    continue;                } else {                    System.out.print(num[i][j] + " ");                }            }            System.out.println();        }        System.out.print("   ");        for (int k = 1; k <= 11; k++) {            System.out.print("=");        }        System.out.print("\n" + "   ");        for (int k = 0; k <= 5; k++) {            System.out.print(k + " ");        }        System.out.println("\n");    }    /**     * 用来找出符合条件的单元     * @param matrix 输入的矩阵     * @return 包含所有符合条件的单元的容器     */    private static ArrayList<MatchingCell> findMatchingCells(int[][] matrix) {        // TODO Auto-generated method stub        final int lineSize = matrix.length;        final int colSize = matrix[0].length;        ArrayList<MatchingCell> cellList = new ArrayList<MatchingCell>();                //以每一个元素为中心试探。        for ( int i=0; i<lineSize; i++ ){            for ( int j=0; j<colSize; j++ ){                check(matrix, j, i, cellList);            }        }                return cellList;    }    /**     * 从上下左右四个方向查找某一个点是否符合要求,是则将其加入容器     * @param matrix 输入的矩阵     * @param i 元素横坐标     * @param j 元素纵坐标     * @param cellList 包含符合条件元素的容器     */    private static void check(int[][] matrix, final int i, final int j,             ArrayList<MatchingCell> cellList) {        // TODO Auto-generated method stub        int toBeCheck = matrix[i][j];        int index = 0;        int count = 0;        MatchingCell tempCell = null;                //Upwards        index = i-1;        count = 0;        while(index >= 0){            if( matrix[index][j] != toBeCheck )                break;            index--;        }        count = i - index;        if (count >= MIN_CELL_SIZE){            tempCell = new MatchingCell(i, j, count, Direct.UP);            cellList.add(tempCell);        }                //Downwards        index = i+1;        count = 0;        while(index < matrix.length){            if( matrix[index][j] != toBeCheck )                break;            index++;        }        count = index - i;        if (count >= MIN_CELL_SIZE){            tempCell = new MatchingCell(i, j, count, Direct.DOWN);            cellList.add(tempCell);        }                //Left        index = j-1;        count = 0;        while(index >= 0){            if( matrix[i][index] != toBeCheck )                break;            index--;        }        count = j - index;        if (count >= MIN_CELL_SIZE){            tempCell = new MatchingCell(i, j, count, Direct.LEFT);            cellList.add(tempCell);        }                //Right        index = j+1;        count = 0;        while(index < matrix[0].length){            if( matrix[i][index] != toBeCheck )                break;            index++;        }        count = index - j;        if (count >= MIN_CELL_SIZE){            tempCell = new MatchingCell(i, j, count, Direct.RIGHT);            cellList.add(tempCell);        }    }        /**     * 根据cellList的记录把相应的值改为-1     * @param matrix 需要改的矩阵     * @param cellList 存放所有单元的容器     */    private static void setValue(int[][] matrix, ArrayList<MatchingCell> cellList) {        for ( MatchingCell tempCell: cellList){            switch(tempCell.direct){            case UP:                for ( int i=tempCell.lineIndex; i>tempCell.lineIndex - tempCell.num; i-- ){                    matrix[i][tempCell.colIndex] = -1;                }                break;            case DOWN:                for ( int i=tempCell.lineIndex; i<tempCell.lineIndex + tempCell.num; i++ ){                    matrix[i][tempCell.colIndex] = -1;                }                break;            case LEFT:                for ( int i=tempCell.colIndex; i>tempCell.colIndex - tempCell.num; i-- ){                    matrix[tempCell.lineIndex][i] = -1;                }                break;            case RIGHT:                for ( int i=tempCell.colIndex; i<tempCell.colIndex + tempCell.num; i++ ){                    matrix[tempCell.lineIndex][i] = -1;                }                break;            }        }    }    /**     * 用来封装每一个查找到的单元。     * @author Michael     *     */    static class MatchingCell {        final int lineIndex;//横坐标        final int colIndex;//纵坐标        final int num;//元素个数        final Direct direct;//方向                MatchingCell(int i, int j, int n, Direct d){            lineIndex = i;            colIndex = j;            num = n;            direct = d;        }    }}
  相关解决方案