⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 numbercal.java

📁 数字游戏_Java版,一个用java写的数字游戏
💻 JAVA
字号:
package com.john.cal2;


public class NumberCal
{

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
//		int [][] n = new int[10][10];	//使用下标为:1-9
		//初始化数据
		int [][]n={	{0,0,0,0,0,0,0,0,0,0},
					{0,0,7,0,0,1,0,0,5,0},
					{0,2,0,0,0,7,0,0,0,4},
					{0,0,0,1,3,0,9,2,0,0},
					{0,0,0,3,9,0,2,6,0,0},
					{0,6,2,0,0,0,0,0,1,9},
					{0,0,0,4,1,0,5,8,0,0},
					{0,0,0,7,4,0,8,3,0,0},
					{0,3,0,0,0,2,0,0,0,6},
					{0,0,1,0,0,5,0,0,4,0}};
		
		
//		int [][]n={	{0,0,0,0,0,0,0,0,0,0},
//					{0,0,4,0,0,9,0,0,0,3},
//					{0,8,0,9,0,0,4,0,5,0},
//					{0,0,3,0,7,0,0,1,0,0},
//					{0,0,0,7,0,0,5,0,9,0},
//					{0,6,0,0,0,0,0,0,0,7},
//					{0,0,9,0,1,0,0,6,0,0},
//					{0,0,0,3,0,0,2,0,1,0},
//					{0,0,2,0,5,0,0,7,0,4},
//					{0,5,0,0,0,3,0,0,6,0}};

		//开始计算
		printNumbers(n);
		
		
//		System.out.println("------------------");
//		printNumbers(cal(n));						//1
//		System.out.println("------------------");
//		printNumbers(cal(n));						//2
//		System.out.println("------------------");
//		printNumbers(cal(n));						//3
//		System.out.println("------------------");
//		printNumbers(cal(n));						//4
		///////////////
		
		for (int i = 0; i < 100; i++)
		{
			System.out.println("---------------------------------------: "+i);
			printNumbers(cal(n));	
			if(isFinished(n))
				break;
		}
		
//		System.out.println("------------------");
//		printNumbers(cal(n));
//		System.out.println("------------------");
//		printNumbers(cal(n));

	}
	
	public static boolean isFinished(int [][] n)
	{
		for (int i = 1; i < 10; i++)
		{
			for (int j = 1; j < 10; j++)
			{
				if(n[i][j]==0)
					return false;
			}
		}
		return true;
	}
	
	
	public static void printNumbers(int [][] n)
	{
		for (int i = 1; i < 10; i++)
		{
			for (int j = 1; j < 10; j++)
			{
				System.out.print(n[i][j]+"   ");
			}
			System.out.println();
			System.out.println();
		}
	}

	public static int [][] cal(int [][] n)
	{
		int [] a_block;
		int [] a_row;
		int [] a_line;

		int [][] newNumber = null;//= new int[10][10];

		for (int i = 1; i < 10; i++)
		{
			for (int x = 1; x < 10; x++)
			{
				
			}
			a_block = getAvBlock(n,i);
			a_row = getAvRow(n,i);
			a_line = getAvLine(n,i);

			newNumber = fillBlank(n,a_block,a_row,a_line,i);
		}
		return newNumber;
	}
	
	public static int [] blockHasNum(int [][] n, int num)
	{
		int []numRecode = new int[10]; 
		for (int i = 1; i < 10; i++)
		{
			for (int j = 1; j < 4; j++)
			{
				for (int k = 1; k < 4; k++)
				{
					if(n[i*j][k]==num)
						numRecode[i]=1;
				}
			}
		}
		return null;
	}
	/////new
	public static int [] getAvBlock(int [][] n, int num)
	{
		int []numRecode = new int[10]; 
		for (int i = 1; i < 10; i++)
		{
			int x,y;
			x = (i-1)/3;
			y = (i-1)%3;
//			if(y!=0)
//				y=2;
			
			int n_row,n_line;

			for (int j = 1; j < 4; j++)
			{
				for (int k = 1; k < 4; k++)
				{
					n_row = x*3+j;
					n_line = y*3+k;
					if(n[n_row][n_line]==num)
						numRecode[i]=1;
				}
			}
		}
		return numRecode;
	}

	public static int [][] fillBlank(int [][] n, int [] block, int [] row, int [] line, int num)
	{
		int [][] newNumber = new int[10][10];
		System.arraycopy(n, 0, newNumber, 0, 10);
		for (int i = 1; i < 10; i++)
		{
			if(block[i]==0)
			{
				int x,y;
				x = (i-1)/3;
				y = (i-1)%3;
				
				int n_row,n_line;

				int n_time = 0;
				int n_x=0,n_y=0;

				for(int j = 1; j < 4; j++)
				{
					for(int k = 1; k < 4; k++)
					{
						n_row = x*3+j;
						n_line = y*3+k;
						if((n[n_row][n_line]==0)&&(row[n_row]==1)&&(line[n_line]==1))
						{
							n_x = n_row;
							n_y = n_line;
							n_time++;
						}	
					}
				}
				if(n_time == 1)
					newNumber[n_x][n_y] = num;
			}
		}
		return newNumber;
	}


	public static int [] getAvLine(int [][] n, int num)
	{
		int []numRecode = new int[10]; 
		for (int x = 1; x < 10; x++)
		{
			if(!isRowHasNum(n,x,num))
				numRecode[x]=1;
		}
		return numRecode;
	}


	public static int [] getAvRow(int [][] n, int num)
	{
		int []numRecode = new int[10]; 
		for (int x = 1; x < 10; x++)
		{
			if(!isLineHasNum(n,x,num))
				numRecode[x]=1;
		}
		return numRecode;
	}

	public static boolean isLineHasNum(int [][] n, int line, int num)//列
	{
		for (int i = 1; i < 10; i++)
		{
			if(n[line][i]==num)
				return true;
		}
		return false;
	}

	public static boolean isRowHasNum(int [][] n, int row, int num)//行
	{
		for (int i = 1; i < 10; i++)
		{
			if(n[i][row]==num)
				return true;
		}
		return false;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -