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

本文实现一个Java小程序: [b]将所有数值为0的元素置于数组最后。[/b]

例如:

移动前: [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]

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

[b]思路:[/b]

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;
}


这样,将所有值为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;
}



[b]完整代码和测试结果如下:[/b]

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)));


}
}


[b]某一次运行的结果如下:[/b]
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]


转载请注明出处: [url]http://mouselearnjava.iteye.com/blog/1986495[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值