[Java小程序] 将所有数值为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,则将该位置的元素数值放置到目标数组上去,目标数组上的位置由变量nonZerosCount的值决定。
基于这两点,写出方法,如下:
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;}
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)));}}