螺旋矩阵Junit测试

最近在看Junit,正好上一篇写了螺旋矩阵算法,顺便写个测试代码。

创建Junit,我用的是eclipse,它自带Junit。所以比较简单,不需要安装

方法就是先右键java项目,选Build Path,AddLibraries,打开之后选Junit。

然后你会发现在类里面多了个luoxuanTest,然后编写代码。因为用Junit测试需要用一个返回值,所以我稍微改了一下luoxuan.java的代码,加了一个返回值。

luoxuan.java的代码:

package news;
import java.util.Scanner;

public class luoxuan {
	public static final int NMAX = 100;
	public static void main(String [] arg){
	/*
 	 * 编程输出螺旋方阵.
螺旋方阵是指将从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。如4阶的螺旋方阵形式如下:
1    2     3     4
12  13  14    5
11  16  15    6
10   9    8      7
要求:1)从键盘输入螺旋方阵的阶数
        2)代码有注释
        3)对算法的思路给出文字描述 

 	
 	 */
		System.out.println("请输入螺旋矩阵阶数:");
	 	Scanner scanner=new Scanner(System.in);
	 	int n=scanner.nextInt();	
	 	int[][] arrays=new int[NMAX][NMAX];
		
	 	
	 	int i,j;
	 	for(i=0;i<n;i++)
	 	for(j=0;j<n;j++)
	 	arrays[i][j] = 0;
	 	System.out.println("从矩阵的左上角开始从数字1开始螺旋:");
	 	getluoxuan1(arrays,n);
	 	display(arrays,n);

	 	System.out.println();
	 	System.out.println("从矩阵的右上角开始从数字1开始螺旋:");
	 	getluoxuan2(arrays,n);
	 	display(arrays,n);

	 	System.out.println();
	 	System.out.println("从矩阵的左上角开始从数字的最大值开始螺旋:");
	 	getluoxuan11(arrays,n);
	 	display(arrays,n);


	 	System.out.println();
	 	System.out.println("从矩阵的右上角开始从矩阵的最大值开始螺旋:");
	 	getluoxuan22(arrays,n);
	 	display(arrays,n);


	 	}

 	
 	static int[][] display(int[][] arrays, int n) {
		// TODO Auto-generated method stub
 		int i,j;
 	 	for(i=0;i<n;i++)
 	 	{
 	 	for(j=0;j<n;j++)
 	 		System.out.printf("%5d",arrays[i][j]);
 	 	
 		System.out.println();
 	 	}
 	 	
		return arrays;
	}


	//核心算法:
	static int[][] getluoxuan1(int [][]arrays,int n){
// 	System.out.println("从外到内螺旋,且数字从小到大,从矩阵的左上角开始从数字1开始螺旋:");
 	
 	int c=0,i,j;
 	int z = n*n;
 	int ou=1;
 	while(ou<=z)
 	{


 	i=0;
 	j=0;
 	for(i+=c,j+=c;j<n-c;j++)  //从左到右
 	{
 		if(ou>z) break;
 		arrays[i][j] = ou++;
 	}
 	for(j--,i++;i<n-c;i++) // 从上到下
 	{
 	if(ou>z) break;
 	arrays[i][j] = ou++;
 	}
 	for(i--,j--;j>=c;j--)//从右到左
 	{
 	if(ou>z) break;
 	arrays[i][j] = ou++;
 	}
 	for(j++,i--;i>=c+1;i--)//从下到上
 	{
 	if(ou>z)  break;
 	arrays[i][j] = ou++;
 	}
 	c++;


 	}
 	
 	//System.out.println(arrays[2][3]);
 	
 	return arrays;
 	}


 	static int[][] getluoxuan11(int [][]arrays,int n)
 	{
 //	System.out.println("从矩阵的左上角开始从数字的最大值开始螺旋");
 	int c=0,i,j;
 	int z = n*n;
 	int ou=z;
 	while(ou>=1)
 	{


 	i=0;
 	j=0;
 	for(i+=c,j+=c;j<n-c;j++)  //从左到右
 	{
 	if(ou>z) break;
 	arrays[i][j] = ou--;
 	}
 	for(j--,i++;i<n-c;i++) // 从上到下
 	{
 	if(ou>z) break;
 	arrays[i][j] = ou--;
 	}
 	for(i--,j--;j>=c;j--)//从右到左
 	{
 	if(ou>z) break;
 	arrays[i][j] = ou--;
 	}
 	for(j++,i--;i>=c+1;i--)//从下到上
 	{
 	if(ou>z)  break;
 	arrays[i][j] = ou--;
 	}
 	c++;


 	}

 	return arrays;
 	}


 	static int[][] getluoxuan2(int [][]arrays,int n)
 	{
// 	System.out.println("从矩阵的右上角开始从数字1开始螺旋:");
 	int c=0,i,j;
 	int z = n*n;
 	int ou=1;
 	while(ou<=z)
 	{


 	i=0;
 	j=0;
 	for(i=c,j=n-c-1;j>=c;j--)  //从右到左
 	{
 	if(ou>z) break;
 	arrays[i][j] = ou++;
 	}
 	for(j++,i++;i<n-c;i++) // 从上到下
 	{
 	if(ou>z) break;
 	arrays[i][j] = ou++;
 	}
 	for(i--,j++;j<n-c;j++)//从左到右
 	{
 	if(ou>z) break;
 	arrays[i][j] = ou++;
 	}
 	for(j--,i--;i>=c+1;i--)//从下到上
 	{
 	if(ou>z)  break;
 	arrays[i][j] = ou++;
 	}
 	c++;


 	}
 	return arrays;
 	}


 	static int[][] getluoxuan22(int [][]arrays,int n)
 	{
 //	System.out.println("从矩阵的右上角开始从矩阵的最大值开始螺旋:");
 	int c=0,i,j;
 	int z = n*n;
 	int ou=z;
 	while(ou>=1)
 	{


 	i=0;
 	j=0;
 	for(i=c,j=n-c-1;j>=c;j--)  //从右到左
 	{
 	if(ou>z) break;
 	arrays[i][j] = ou--;
 	}
 	for(j++,i++;i<n-c;i++) // 从上到下
 	{
 	if(ou>z) break;
 	arrays[i][j] = ou--;
 	}
 	for(i--,j++;j<n-c;j++)//从左到右
 	{
 	if(ou>z) break;
 	arrays[i][j] = ou--;
 	}
 	for(j--,i--;i>=c+1;i--)//从下到上
 	{
 	if(ou>z)  break;
 	arrays[i][j] = ou--;
 	}
 	c++;


 	}
 	return arrays;
 	}

 

 	

    	
}

测试代码:luoxuanTest.java:

package news;

import static org.junit.Assert.*;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

public class luoxuanTest {
	public static final int[][] ARRAYS=new int[100][100];
	public static final int N=4;
	
	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		 System.out.println("this is setUpBeforeClass()...");
	}

	@AfterClass
	public static void tearDownAfterClass() throws Exception {
		System.out.println("this is tearDownAfterClass()...");
	}

	@Before
	public void setUp() throws Exception {
		int ii,jj;
	 	for(ii=0;ii<100;ii++)
	 	for(jj=0;jj<100;jj++)
	 	ARRAYS[ii][jj] = 0;
		
		System.out.println("this is setUp()...");
	}

	@After
	public void tearDown() throws Exception {
		System.out.println("this is tearDown()...");
	}
/*
	@Test
	public final void testMain() {
		fail("Not yet implemented"); // TODO
	}

	@Test
	public final void testDisplay() {
		fail("Not yet implemented"); // TODO
	}
*/
	@Test
	public final void testGetluoxuan1() {
		System.out.println("测试最小值在左上角的算法是否正确:");  
        int result = (luoxuan.getluoxuan1(ARRAYS, N))[2][3];
        
        assertEquals("测试最小值在左上角的算法不正确",6, result);  

	}

	@Test
	public final void testGetluoxuan11() {
		System.out.println("测试最大值在左上角的算法是否正确:");  
        int result = (luoxuan.getluoxuan11(ARRAYS, N))[2][3];
        
        assertEquals("测试最大值在左上角的算法不正确",11, result);  

	}

	@Test
	public final void testGetluoxuan2() {
		System.out.println("测试最小值在右上角的算法是否正确:");  
        int result = (luoxuan.getluoxuan2(ARRAYS, N))[3][2];      
        assertEquals("测试最小值在右上角的算法不正确",9, result);  

	}

	@Test
	public final void testGetluoxuan22() {
		System.out.println("测试最大值在右上角的算法是否正确:");  
        int result = (luoxuan.getluoxuan22(ARRAYS, N))[3][2];      
        assertEquals("测试最大值在右上角的算法不正确",8, result);  

	}

}
然后发现是绿色的,说明正确。

猜你喜欢

转载自blog.csdn.net/CSDN_laoganma_com/article/details/79591918