- 浏览: 460170 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
ty1972873004:
sunwang810812 写道我运行了这个例子,怎么结果是这 ...
Java并发编程: 使用Semaphore限制资源并发访问的线程数 -
lgh1992314:
simpleDean 写道请问,Logger.setLevel ...
Java内置Logger详解 -
sunwang810812:
我运行了这个例子,怎么结果是这样的:2号车泊车6号车泊车5号车 ...
Java并发编程: 使用Semaphore限制资源并发访问的线程数 -
jp260715007:
nanjiwubing123 写道参考你的用法,用如下方式实现 ...
面试题--三个线程循环打印ABC10次的几种解决方法 -
cb_0312:
SurnameDictionary文章我没看完,现在懂了
中文排序
本文实现一个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的值决定。
基于这两点,写出方法,如下:
这样,将所有值为0的元素放置到数组最后面的功能就实现了。
接下来,再实现一个方法,可以指定一个数字Num,然后将所有值为Num的的元素放置在数组的最后面。
完整代码和测试结果如下:
某一次运行的结果如下:
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
这样做是一种方法,但是并不能保证原有非零数字在数组中的顺序。
例如:
移动前: [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; }
这样,将所有值为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
评论
2 楼
MouseLearnJava
2013-12-08
znfsky 写道
要这么复杂?一头一尾两个指针,一个向后一个向前,遇到0和非0时交换数据不就可以了吗?
这样做是一种方法,但是并不能保证原有非零数字在数组中的顺序。
1 楼
znfsky
2013-12-07
要这么复杂?一头一尾两个指针,一个向后一个向前,遇到0和非0时交换数据不就可以了吗?
发表评论
-
工厂类中移除if/else语句
2016-07-10 19:52 850面向对象语言的一个强大的特性是多态,它可以用来在代码中移除 ... -
Java编程练手100题
2014-12-11 17:13 6670本文给出100道Java编程练手的程序。 列表如下: 面 ... -
数组复制的三种方法
2014-11-30 12:57 2178本文将给出三种实现数组复制的方法 (以复制整数数组为例)。 ... -
数组复制的三种方法
2014-11-30 12:54 0本文将给出三种实现数组复制的方法 (以复制整数数组为例)。 ... -
四种复制文件的方法
2014-11-29 13:21 1685尽管Java提供了一个类ava.io.File用于文件的操 ... -
判断一个字符串中的字符是否都只出现一次
2014-11-25 12:58 2655本篇博文将给大家带来几个判断一个字符串中的字符是否都只出现一 ... -
使用正则表达式判断一个数是否为素数
2014-11-23 13:35 2104正则表达式能够用于判断一个数是否为素数,这个以前完全没有想过 ... -
几个可以用英文单词表达的正则表达式
2014-11-21 13:12 3700本文,我们将来看一下几个可以用英文单词表达的正则表达式。这些 ... -
(广度优先搜索)打印所有可能的括号组合
2014-11-20 11:58 1917问题:给定一个正整n,作为括号的对数,输出所有括号可能 ... -
随机产生由特殊字符,大小写字母以及数字组成的字符串,且每种字符都至少出现一次
2014-11-19 14:48 3940题目:随机产生字符串,字符串中的字符只能由特殊字符 (! ... -
找出1到n缺失的一个数
2014-11-18 12:57 3116题目:Problem description: You h ... -
EnumSet的几个例子
2014-11-14 16:24 8708EnumSet 是一个与枚举类型一起使用的专用 Set 实现 ... -
给定两个有序数组和一个指定的sum值,从两个数组中各找一个数使得这两个数的和与指定的sum值相差最小
2014-11-12 11:24 3285题目:给定两个有序数组和一个指定的sum值,从两个数组 ... -
Java面试编程题练手
2014-11-04 22:49 6652面试编程 写一个程序,去除有序数组中的重复数字 编 ... -
Collections用法整理
2014-10-22 20:55 9799Collections (java.util.Collect ... -
The Code Sample 代码实例 个人博客开通
2014-09-04 18:48 1373个人博客小站开通 http://thecodesample. ... -
Collections.emptyXXX方法
2014-06-08 13:37 2104从JDK 1.5开始, Collections集合工具类中预先 ... -
这代码怎么就打印出"hello world"了呢?
2014-06-08 00:37 7355for (long l = 4946144450195624L ... -
最短时间过桥
2014-04-21 22:03 4073本文用代码实现最短时间过桥,并且打印如下两个例子的最小过桥时间 ... -
将数组分割成差值最小的子集
2014-04-20 22:34 2839本文使用位掩码实现一个功能 ==》将数组分割成差值最小的子集 ...
相关推荐
1. 编写一个程序打印数出有10个元素的浮点数组a1中最大值和最小值。 2.将有10个元素的数组a1 拷贝至含有15个元素的...5.设某个一维数组中有25个元素,编写一个顺序查找程序,从中查找值为80的元素在数组中的位置。
1. 编写一个程序打印数出有10个元素的浮点数组a1中最大值和最小值。 2.将有10个元素的数组a1 拷贝至含有15个元素的...5.设某个一维数组中有25个元素,编写一个顺序查找程序,从中查找值为80的元素在数组中的位置。
Java程序设计课程实验4-数组Java程序设计课程实验4-数组Java程序设计课程实验4-数组Java程序设计课程实验4-数组Java程序设计课程实验4-数组Java程序设计课程实验4-数组Java程序设计课程实验4-数组Java程序设计课程...
写的Java文件中实现了统计数组中相同元素个数的功能以及统计数组中小于某个元素的所有元素的数量功能,非常的实用。
Java SE程序 接口用对象数组实现Java SE程序 接口用对象数组实现Java SE程序 接口用对象数组实现Java SE程序 接口用对象数组实现Java SE程序 接口用对象数组实现Java SE程序 接口用对象数组实现Java SE程序 接口用...
数据结构教程(JAVA语言描述) 求一个含有n个整数元素的数组a[0..n-1]中的最大元素,有这样一种思路:先比较第一个元素,再比较第二个元素,比较过程向中间靠近
java-区分数字元素和字符串元素的数组排序-代码,希望能帮到大家
java函数学习之查找函数使用,是在学习java过程中的一个小例子
先声明一个数组,这个数组中可能会存在重复的元素,而且顺序也是杂乱的,要求将这个数组中的重复元素排除掉并将新得到的数组进行递增排序
java基础之一维数组元素的插入,java基础之一维数组元素的插入
数据结构教程(JAVA语言描述) 设计一个算法,将含有n个整数元素的数组a[0..n-1]循环右移m位,要求算法的空间复杂度为O(1)
Java随机产生数组元素并防止产生有重复元素方法
该源代码很好地体现了数组与List之间的转换,同时也体现了两个集合的合并操作
先要创建一个新数组 newArray[],要求新数组中的元素与原数组逆序,并且如果原数组中的元素值小于0,在新数组中按0存储。试编程输出新数组 中的元素,程序运行结果如下: 原数组为:1,3,-1,5,-2 逆序并处理后的数组为...
String[] arr = new String[]{"a","b","c","d","e","eeee","f","g","a","h"}; Integer[] arr1 = new Integer[]{22,33,44,55,6,7,22,88,999};...a在被查询数组的下标为:0,8 33在被查询数组的下标为:1
Java bytes数组与基本类型的相互转换 Int -> Bytes int64ToByte8 int48ToByte6 int40ToByte5 int32ToByte4 int24ToByte3 int16ToByte2 int8ToByte Bytes -> Int bytesToInt64 bytesToInt48 bytesToInt40 bytesTo...
Java程序寻找数组中最大的元素
任务2、显示一个整型数组中的所有元素 任务3、对数组元素求平均 任务4、将数组内容反向存储 1、使用随机数初始化一个整型数组 数组作为方法的形参 public static void init( ) int[] array …… 0 1 2 …… n-2...
java 动态的数组链表 java 动态的数组链表 java 动态的数组链表