数独博士1.5_数独B

数独博士1.5

问候,

本文的第二部分定义了两组方法。 一种方法

能够读取整个数独板以及几种可以编写的方法

这样的板子,格式很好。

我们想要一种可以从

阅读器流并初始化

相应地登上。 如果我们可以阅读文本文件,将非常方便

其内容如本示例第一部分所示的示例板中所示

文章。

基本上,我们希望读取81位数字或点; 点和“ 0”都表示一个

空单元格,而数字1 ... 9描述一个已填充的单元格。 开始:


public boolean read(Reader r) { 
    int i= 0, j= 0; // the first position of the board 
    try {
        // keep on reading characters:
        for (int x; (x= r.read()) != -1; ) {
            // skip it if not a digit nor a dot
            if (!(Character.isDigit(x) || x == '.')) continue; 
            // is it a digit 1 ... 9?
            if (!(x == '0' || x == '.'))
                    setValue(i, j, x-'0'); 
            // position i,j at next position, return when done
            if ((j= (j+1)%9) == 0)
                if (++i == 9) return true;
        }
    }
    catch (IOException ioe) { } 
    // something went wrong
    return false;
}
下一组方法可以根据Writer打印电路板。 它打印

使用与示例板中所示格式相同的板

文章的第一部分:

 
// print a horizontal separator line
private void printHorizontal(PrintWriter p) {
    p.println("+-------+-------+-------+");
} 
// print a little vertical line
private void printVertical(PrintWriter p) {
    p.print("| ");
} 
// print the Sudoku board
public void print(Writer w) { 
    PrintWriter p= new PrintWriter(w); 
    for (int i= 0; i < rows.length; i++) {
        if (i%3 == 0) printHorizontal(p);
        for (int j= 0; j < columns.length; j++) {
            if (j%3 == 0) printVertical(p);
            p.print(board[i][j]+" ");
        }
        printVertical(p);
        p.println();
    }
    printHorizontal(p);
    p.flush();
}
请注意,读取方法和写入方法都不会关闭字符

溪流; Reader和Writer作为参数传入,因此

这些方法负责关闭流。 读取方法确实

捕获IOExceptions并简单地返回false; 来电者只知道

由于某种原因而无法读取板,即抛出IOException或

阅读器的内容未构成有效的主板配置。

现在,我们拥有操作数独板的所有原始方法:

测试并在板上的任何位置设置一个值,我们可以再次重置单元格,

可以初始化并给整个板子提供一个Reader,最后我们可以打印

数独板授予作家。

本文的第三部分也是最后一部分显示了实际的Sudoku求解器。 所有

上面显示的方法是“ Sudoku”类的一部分。 求解器方法也将

成为成员方法。 在本文的第三部分中见。

亲切的问候,

乔斯

翻译自: https://bytes.com/topic/java/insights/739704-sudoku-b

数独博士1.5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值