Java tutorial
/** * Project: ShuduSolver * * File Created at 2013-5-11 * $Id$ * * Copyright 1999-2100 Alibaba.com Corporation Limited. * All rights reserved. * * This software is the confidential and proprietary information of * Alibaba Company. ("Confidential Information"). You shall not * disclose such Confidential Information and shall use it only in * accordance with the terms of the license agreement you entered into * with Alibaba.com. */ package com.mike.angry.main; import java.util.List; import org.apache.log4j.Logger; import org.springframework.util.Assert; import com.mike.angry.dm.DataModel; import com.mike.angry.dm.DataModelStatusHelper; import com.mike.angry.dm.Digital; import com.mike.angry.dm.DigitalResolveResultDO; import com.mike.angry.dm.RuleResolveResultDO; /** * ? * * @author haiquan.guhq */ public abstract class SolverResultOutput { public static final Logger log = Logger.getLogger(SolverResultOutput.class); public static void printResult(DataModel dataModel) { // ?? log.info("puzzle:" + dataModel.getPath() + "\t"); String abc = DataModelStatusHelper.isSolved(dataModel) ? "?" : ""; log.info(abc); for (int i = 0; i < 9; i++) { StringBuffer oneline = new StringBuffer(""); for (int j = 0; j < 9; j++) { Digital digital = dataModel.getBigSquare()[i][j]; if (digital.isDetermined()) { oneline.append(digital.getNumber() + ","); } else { oneline.append("?,"); } } log.info("line " + i + ":\t " + oneline.toString()); } // log.info("=============\n"); StringBuffer oneline = new StringBuffer("\n"); int total = processRuleResolveResult(oneline, dataModel); log.info("?" + dataModel.getInitValued() + "\t" + "" + total + "\t" + "" + DataModelStatusHelper.calcNotFound(dataModel) + "!"); log.info(oneline); Assert.isTrue(81 == dataModel.getInitValued() + total + DataModelStatusHelper.calcNotFound(dataModel)); // ? for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { log.debug(dataModel.getBigSquare()[i][j].toString()); } } } private static int processRuleResolveResult(StringBuffer oneline, DataModel dataModel) { int total = 0; List<List<RuleResolveResultDO>> fixedProcess = dataModel.getFixedProcess(); for (int i = 0; i < fixedProcess.size(); i++) { List<RuleResolveResultDO> resolvdList = fixedProcess.get(i); oneline.append("\n" + (i + 1) + "" + resolvdList.size() + "??"); for (RuleResolveResultDO oneItem : resolvdList) { // ? List<DigitalResolveResultDO> dList = oneItem.getDecidedList(); oneline.append("" + oneItem.getRuleName() + " " + dList.size() + ":\n"); for (DigitalResolveResultDO oneDigital : dList) { oneline.append(oneDigital.getDigital().getNumber() + "(" + oneDigital.getDigital().getX() + "," + oneDigital.getDigital().getY() + ")" + ", "); } oneline.append("\n"); total += dList.size(); // ?? // List<DigitalResolveResultDO> allAffactList = oneItem // .getAllAffactList(); // oneline.append("" + oneItem.getRuleName() + " ? " // + allAffactList.size() + ":\n"); // for (DigitalResolveResultDO oneDigital : allAffactList) { // oneline.append("(" + oneDigital.getDigital().getX() + "," // + oneDigital.getDigital().getY() + ")" + "??" // + oneDigital.getDeduceNums() + "; "); // } // oneline.append("\n"); } } return total; } public static void recordInitValued(DataModel dataModel) { int count = 0; for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { if (dataModel.getBigSquare()[i][j].isDetermined()) { count++; } } } dataModel.setInitValued(count); } public static void printResultForDebug(DataModel dataModel) { String empty = " "; // ? for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { Digital digital = dataModel.getBigSquare()[i][j]; StringBuffer emptys = new StringBuffer(); if (digital.isDetermined()) { for (int k = 0; k < 8; k++) { emptys.append(empty); } System.out.print((digital.getNumber()) + emptys.toString() + ","); } else { List<Integer> possibleNums = digital.getPossibleNums(); for (Integer oneInt : possibleNums) { emptys.append(oneInt); } for (int k = 0; k < 9 - possibleNums.size(); k++) { emptys.append(empty); } System.out.print(emptys.toString() + ","); } } System.out.println(); } } }