我目前正在制作一个数独程序,但是我当前的代码似乎让我失望。如果一行多次包含相同的数字,下面的脚本应该打印出“不一致的数独谜题”,但遗憾的是它没有......我尝试了几种不同的尝试,但都没有成功。public void checkRow() { int count = 0; for(int j = 0; j < list.size(); j++) { for(int a = 1; a < 10; a++) { for (int i=0; i < list.get(j).length(); i++) { if(list.get(j).charAt(i) == a) { count++; if(count >= 2) { System.out.println("Inconsistent sudoku puzzle"); count = 0; } } } count = 0; } }}这是我所有错误检查的集合:public void errorCheck() { this.checkRow(); this.checkColumn(); this.checkBox();}在这里,我将它加载到我的 main.js 中。代码要复杂得多,但这些应该是涉及问题的部分。public static void main(String[] args) throws Exception { Sudoku s = new Sudoku("C:\\Users\\caspe\\Downloads\\Sudoku001.sdk"); s.printBoard(); s.errorCheck(); s.getNum(); while(getNum() > 0) { System.out.println("Next move, please (row , column , value )"); Scanner scanner = new Scanner(System.in); int row = scanner.nextInt(); int column = scanner.nextInt() ; int value = scanner.nextInt(); if (s.moves(row, column, value)); { s.errorCheck(); } s.printBoard(); }}
3 回答
慕村225694
TA贡献1880条经验 获得超4个赞
问题
您正在使用charAt并尝试将其结果与数字进行比较:
list.get(j).charAt(i) == a
但是,这样做是将字符的ascii值与数字进行比较。
示例:
String a = "3";
System.out.println((int) a.charAt(0)); // This prints 51
解决方案
如果您想比较数值,您必须执行以下操作:
String a = "3";
System.out.println(Character.getNumericValue(a.charAt(0))); // This prints 3
Character.getNumericValue(a.charAt(0)) 返回字符的数字值。
执行
将其实现到您的代码中将如下所示:
Character.getNumericValue(list.get(j).charAt(i)) == a
宝慕林4294392
TA贡献2021条经验 获得超8个赞
这一行:
if(list.get(j).charAt(i) == a)
总是false因为您将 achar与 an进行比较int。
将其替换为
if((list.get(j).charAt(i)-'0') == a)
list.get(j).charAt(i)-'0' 为您提供字符的数字表示
添加回答
举报
0/150
提交
取消
