如何在Eclipse中提供输入?

时间:2014-04-23 10:00:41

标签: java eclipse

我从网上下载了这个数独求解器。

我正在尝试在Eclipse中运行该程序。但我不确定如何提供输入。

由于我是Java和Eclipse的新手,我不知道该怎么做。

请帮助。

以下是代码:

public class Sudoku {


public static void main(String[] args) {

    //Load the matrix
    int[][] matrix = parseProblem(args);

    writeMatrix(matrix);

    //Find a solution
    if (solve(0, 0, matrix))
        writeMatrix(matrix);
    else
        System.out.println("NONE");
}

static boolean solve(int i, int j, int[][] cells) {

    if (i == 9) {
        i = 0;
        if (++j == 9) {
            return true;
        }
    }

    if (cells[i][j] != 0) {
        return solve(i + 1, j, cells);
    }

    for (int val = 1; val <= 9; ++val) {
        if (legal(i, j, val, cells)) {
            cells[i][j] = val;
            if (solve(i + 1, j, cells)) { 
                return true;
            }
        }
    }

    //Reset
    cells[i][j] = 0;

    return false;
}

static boolean legal(int i, int j, int val, int[][] cells) {

    //Row
    for (int k = 0; k < 9; ++k) {
        if (val == cells[k][j]) {
            return false;
        }
    }

    //Column
    for (int k = 0; k < 9; ++k) {
        if (val == cells[i][k]) {
            return false;
        }
    }

    int boxRowOffset = (i / 3) * 3;
    int boxColOffset = (j / 3) * 3;

    for (int k = 0; k < 3; ++k) {
        for (int m = 0; m < 3; ++m) {
            if (val == cells[boxRowOffset + k][boxColOffset + m]) {
                return false;
            }
        }
    }

    return true;
}

static int[][] parseProblem(String[] args) {

    int[][] problem = new int[9][9];

    for (int i = 0; i < 9; i++) {
        for (int j = 0; j < 9; j++) {
            problem[i][j] = Integer.parseInt(args[i].substring(j, j+1));
        }
    }

    return problem;
}

static void writeMatrix(int[][] solution) {

    for (int i = 0; i < 9; ++i) {

        if (i % 3 == 0) {
            System.out.println(" -----------------------");
        }

        for (int j = 0; j < 9; ++j) {

            if (j % 3 == 0) {
                System.out.print("| ");
            }

            System.out.print(solution[i][j] == 0 ? " " : Integer.toString(solution[i][j]));

            System.out.print(' ');
        }
        System.out.println("|");
    }
    System.out.println(" -----------------------");
}
}

2 个答案:

答案 0 :(得分:3)

parseProblem()方法中,您尝试从命令行参数中读取。

要提供命令行参数,请执行以下步骤:

右键单击该课程。选择运行方式 - &gt;运行配置......

双击左侧面板上的 Java Application

转到右侧面板上的(x)=参数标签。

程序参数字段下,提供程序输入。

在您的情况下,输入参数应类似于:

030400000
870306001
004980000
906034000
005000300
000750204
000043700
500608032
000002080

根据您下载的代码,&#34; 0&#34; 代表空白值。

答案 1 :(得分:1)

此程序基于运行程序时给出的args [],因此如果您希望它运行,您需要转到cmd,转到您的类所在的地图并键入:

示例:java数独091254876985235646586546545645646545645464435435484843521231564545648545643213541564654545313213541354384584514231354854668543215153144544384384354542135453454354451351351315584648648468(您必须提供81个参数,因为您的数独包含9 * 9位数)