我在java中的Sudoku Solver中有错误 [英] I have error in Sudoku Solver in java

查看:56
本文介绍了我在java中的Sudoku Solver中有错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嗨专家。晚安。

我在c中有数独求解器。它运作正常。我只是改成了java编码。但它没有用。它返回一些错误。我对Java有点了解。 Plz帮帮我。



C编码:



Hi experts. Good Evening.
I have sudoku solver in c. It is working properly. I just change into java coding. But it is not working. It return some error. I know little bit of java. Plz Help me.

C Coding :

#include <stdio.h>
  
int grid[9][9];
  
void print_solution(void)
{
  static int nsol = 0;
  int r, c;
  
  printf("----- solution %d -----\n", ++nsol);
  for (r = 0; r < 9; r++)
  {
    for (c = 0; c < 9; c++)
    {
      printf("%d", grid[r][c]);
      if (c % 3 == 2) printf("  ");
    }
    printf("\n");
    if (r % 3 == 2) printf("\n");
  }
  
}
  
int safe(int row, int col, int n)
{
  int r, c, br, bc;
  
  if (grid[row][col] == n) return 1;
  if (grid[row][col] != 0) return 0;
  for (c = 0; c < 9; c++)
    if (grid[row][c] == n) return 0;
  for (r = 0; r < 9; r++)
    if (grid[r][col] == n) return 0;
  br = row / 3;
  bc = col / 3;
  for (r = br * 3; r < (br + 1) * 3; r++)
    for (c = bc * 3; c < (bc + 1) * 3; c++)
      if (grid[r][c] == n) return 0;
  
  return 1;
}
  
void solve(int row, int col)
{
  int n, t;
  
  if (row == 9)
    print_solution();
  else
    for (n = 1; n <= 9; n++)
      if (safe(row, col, n)) {
    t = grid[row][col];
    grid[row][col] = n;
    if (col == 8)
      solve(row + 1, 0);
    else
      solve(row, col + 1);
  
    grid[row][col] = t;
      }
}
  
int
main()
{
  int i, j;
  
  printf("enter the sudoku: \n");
  for(i=0;i<9;i++)
    for(j=0;j<9;j++)
    {
      printf("(%d, %d): ", i+1, j+1);
      scanf("%d", &grid[i][j]);
    }
  solve(0,0);
  return 0;
}



我只是对java编码做了一些修改。



Java编码:


I just do some changes in java coding.

Java coding:

import java.util.*;
import java.io.*;

class puzzle
{
  
  public static void main(String[] args)
  {
   int[][] grid = new int[9][9];
   int i, j;
   Scanner in = new Scanner(System.in);
   System.out.println("Enter the Values :");
 
     for(i=0;i<9;i++)
      for(j=0;j<9;j++)
       {
        System.out.print(i+1+","+ j+1);
        
        grid[i][j]=in.nextInt();

       }
   solve(0,0);
   return 0;

  }

void print_solution()
{
  
  static int nsol = 0;
  int r, c;
  System.out.println("----- solution"+ ++nsol + " -----\n");
  for (r = 0; r < 9; r++)
  {
    for (c = 0; c < 9; c++)
    {
     System.out.print(grid[r][c]);
      
      if (c % 3 == 2) 
      System.out.print("  ");
    }
    System.out.println();
    if (r % 3 == 2) 
    System.out.println();
  }
  
}
  
int safe(int row, int col, int n)
{
  int r, c, br, bc;
  
  if (grid[row][col] == n) 
  return 1;
  
  if (grid[row][col] != 0) 
  return 0;
  
  for (c = 0; c < 9; c++)
    if (grid[row][c] == n) 
    return 0;
  
  for (r = 0; r < 9; r++)
    if (grid[r][col] == n) 
    return 0;
  
  br = row / 3;
  bc = col / 3;
  for (r = br * 3; r < (br + 1) * 3; r++)
    for (c = bc * 3; c < (bc + 1) * 3; c++)
      if (grid[r][c] == n) return 0;
  
  return 1;
}
  
void solve(int row, int col)
{
  int n, t;
  
  if (row == 9)
    print_solution();
  else
    for (n = 1; n <= 9; n++)
      if (safe(row, col, n)) {
    t = grid[row][col];
    grid[row][col] = n;
    if (col == 8)
      solve(row + 1, 0);
    else
      solve(row, col + 1);
  
    grid[row][col] = t;
      }
}
}





请帮我看看发生了什么错误?



Please help me what error is happening?

推荐答案

Java中不允许使用静态局部变量。即使它们是 - 什么会让你认为 nsol 需要是静态的?只需删除此关键字。并使用常规手册之一倾斜一些Java。不要混淆,例如,C ++。



-SA
Static local variables are not allowed in Java. Even if they were — what would make you think that nsol needs to be static? Just remove this keyword. And lean some Java, using one of regular manuals. Don't mix it up with, for example, C++.

—SA


这篇关于我在java中的Sudoku Solver中有错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆