[Java小程序] 将所有数值为0的元素置于数组最后_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > [Java小程序] 将所有数值为0的元素置于数组最后

[Java小程序] 将所有数值为0的元素置于数组最后

 2013/12/7 3:26:14  MouseLearnJava  程序员俱乐部  我要评论(0)
  • 摘要:本文实现一个Java小程序:将所有数值为0的元素置于数组最后。例如:移动前:[1,3,0,3,1,4,5,0,3,1,0,2,3,1,9,8,2,2,5,2]移动后:[1,3,3,1,4,5,3,1,2,3,1,9,8,2,2,5,2,0,0,0]如果数组中没有需要移动的数,那么就保持不变。思路:1.定义一个与给定数组长度等长的整形数组,同时定义一个名为nonZerosCount的整形变量,用于统计不为0的元素个数。2.循环遍历给定的整形数组,如果该元素不为0
  • 标签:程序 数组 Java
本文实现一个Java小程序: 将所有数值为0的元素置于数组最后。

例如:

移动前: [1, 3, 0, 3, 1, 4, 5, 0, 3, 1, 0, 2, 3, 1, 9, 8, 2, 2, 5, 2]
移动后: [1, 3, 3, 1, 4, 5, 3, 1, 2, 3, 1, 9, 8, 2, 2, 5, 2, 0, 0, 0]

如果数组中没有需要移动的数,那么就保持不变。

思路:

1. 定义一个与给定数组长度等长的整形数组,同时定义一个名为nonZerosCount的整形变量,用于统计不为0的元素个数。

2. 循环遍历给定的整形数组,如果该元素不为0,则将该位置的元素数值放置到目标数组上去,目标数组上的位置由变量nonZerosCount的值决定。

基于这两点,写出方法,如下:

class="java" name="code">public int[] moveZerosToEnd(int[] data) {
		/**记录一个当前不为零的数字个数*/
		int nonZerosCount = 0;
		int[] result = new int[data.length];
		
		for(int i=0;i<data.length;i++)
		{
			if( 0 != data[i])
			{
				result[nonZerosCount++] = data[i];
			}
		}
		
		/*
		 * 如果不为0的数字个数小于数组的长度,那么将剩余数组中的元素赋值为0。
		 * 
		 *  因为整形数组元素的默认值是0,其实下面的步骤可以省略。
		 */
		
		int length = data.length;
		while(nonZerosCount < length)
		{
			result[nonZerosCount++] = 0;
		}

		return result;
	}


这样,将所有值为0的元素放置到数组最后面的功能就实现了。

接下来,再实现一个方法,可以指定一个数字Num,然后将所有值为Num的的元素放置在数组的最后面。

public int[] moveNumToEnd(int[] data, int numToMove) {
		/**记录一个当前不为numToMove的数字个数*/
		int nonZerosCount = 0;
		
		int[] result = new int[data.length];
		
		for(int i=0;i<data.length;i++)
		{
			if( numToMove != data[i])
			{
				result[nonZerosCount++] = data[i];
			}
		}
		
		
		/*
		 * 剩余元素的组都是numToMove
		 */
		int length = data.length;
		while(nonZerosCount < length)
		{
			result[nonZerosCount++] = numToMove;
		}

		return result;
	}



完整代码和测试结果如下:

public class MoveNumsToEndExample {
	
	/**
	 * 返回一个指定长度和范围的随机数组。
	 * 
	 * @param seed
	 * @param length
	 * @return
	 */
	public int[] generateRandomNumbers(int seed, int length)
	{
		int[] randomNumbers = new int[length];
		Random ran = new Random();
		for(int i=0;i<length;i++)
		{
			randomNumbers[i] = ran.nextInt(seed);
		}
		
		return randomNumbers;
	}

	public int[] moveZerosToEnd(int[] data) {
		/**记录一个当前不为零的数字个数*/
		int nonZerosCount = 0;
		int[] result = new int[data.length];
		
		for(int i=0;i<data.length;i++)
		{
			if( 0 != data[i])
			{
				result[nonZerosCount++] = data[i];
			}
		}
		
		/*
		 * 如果不为0的数字个数小于数组的长度,那么将剩余数组中的元素赋值为0。
		 * 
		 *  因为整形数组元素的默认值是0,其实下面的步骤可以省略。
		 */
		
		int length = data.length;
		while(nonZerosCount < length)
		{
			result[nonZerosCount++] = 0;
		}

		return result;
	}
	
	public int[] moveNumToEnd(int[] data, int numToMove) {
		/**记录一个当前不为numToMove的数字个数*/
		int nonZerosCount = 0;
		
		int[] result = new int[data.length];
		
		for(int i=0;i<data.length;i++)
		{
			if( numToMove != data[i])
			{
				result[nonZerosCount++] = data[i];
			}
		}
		
		
		/*
		 * 剩余元素的组都是numToMove
		 */
		int length = data.length;
		while(nonZerosCount < length)
		{
			result[nonZerosCount++] = numToMove;
		}

		return result;
	}

}


import java.util.Arrays;

public class Main {

public static void main(String[] args) {
		
		
	MoveNumsToEndExample example = new MoveNumsToEndExample();
		
		//产生一个随机整数数组
		int[] randomNumber = example.generateRandomNumbers(10, 20);
		
		System.out.print("Before moving zeros  -->");
		System.out.println(Arrays.toString(randomNumber));
		
		System.out.print("After  moving zeros  -->");
		
		//移动所有的0到最后
		System.out.println(Arrays.toString(example.moveZerosToEnd(randomNumber)));
		
		//移动所有的1到最后
		System.out.print("After  moving ones   -->");
		System.out.println(Arrays.toString(example.moveNumToEnd(randomNumber,1)));
		
		//移动所有的8到最后
		System.out.print("After  moving eights -->");
		System.out.println(Arrays.toString(example.moveNumToEnd(randomNumber,8)));
		
		
	}
}


某一次运行的结果如下:
Before moving zeros  -->[3, 9, 1, 5, 2, 1, 3, 3, 8, 1, 8, 6, 5, 9, 8, 0, 0, 6, 0, 4]
After  moving zeros  -->[3, 9, 1, 5, 2, 1, 3, 3, 8, 1, 8, 6, 5, 9, 8, 6, 4, 0, 0, 0]
After  moving ones   -->[3, 9, 5, 2, 3, 3, 8, 8, 6, 5, 9, 8, 0, 0, 6, 0, 4, 1, 1, 1]
After  moving eights -->[3, 9, 1, 5, 2, 1, 3, 3, 1, 6, 5, 9, 0, 0, 6, 0, 4, 8, 8, 8]


转载请注明出处: http://mouselearnjava.iteye.com/blog/1986495
上一篇: 简单理解Socket 下一篇: 归并排序的详解
发表评论
用户名: 匿名