- 浏览: 467251 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
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 910面向对象语言的一个强大的特性是多态,它可以用来在代码中移除 ... -
Java编程练手100题
2014-12-11 17:13 6735本文给出100道Java编程练手的程序。 列表如下: 面 ... -
数组复制的三种方法
2014-11-30 12:57 2223本文将给出三种实现数组复制的方法 (以复制整数数组为例)。 ... -
数组复制的三种方法
2014-11-30 12:54 0本文将给出三种实现数组复制的方法 (以复制整数数组为例)。 ... -
四种复制文件的方法
2014-11-29 13:21 1745尽管Java提供了一个类ava.io.File用于文件的操 ... -
判断一个字符串中的字符是否都只出现一次
2014-11-25 12:58 2733本篇博文将给大家带来几个判断一个字符串中的字符是否都只出现一 ... -
使用正则表达式判断一个数是否为素数
2014-11-23 13:35 2175正则表达式能够用于判断一个数是否为素数,这个以前完全没有想过 ... -
几个可以用英文单词表达的正则表达式
2014-11-21 13:12 3758本文,我们将来看一下几个可以用英文单词表达的正则表达式。这些 ... -
(广度优先搜索)打印所有可能的括号组合
2014-11-20 11:58 1961问题:给定一个正整n,作为括号的对数,输出所有括号可能 ... -
随机产生由特殊字符,大小写字母以及数字组成的字符串,且每种字符都至少出现一次
2014-11-19 14:48 3984题目:随机产生字符串,字符串中的字符只能由特殊字符 (! ... -
找出1到n缺失的一个数
2014-11-18 12:57 3184题目:Problem description: You h ... -
EnumSet的几个例子
2014-11-14 16:24 8758EnumSet 是一个与枚举类型一起使用的专用 Set 实现 ... -
给定两个有序数组和一个指定的sum值,从两个数组中各找一个数使得这两个数的和与指定的sum值相差最小
2014-11-12 11:24 3334题目:给定两个有序数组和一个指定的sum值,从两个数组 ... -
Java面试编程题练手
2014-11-04 22:49 6706面试编程 写一个程序,去除有序数组中的重复数字 编 ... -
Collections用法整理
2014-10-22 20:55 9851Collections (java.util.Collect ... -
The Code Sample 代码实例 个人博客开通
2014-09-04 18:48 1423个人博客小站开通 http://thecodesample. ... -
Collections.emptyXXX方法
2014-06-08 13:37 2148从JDK 1.5开始, Collections集合工具类中预先 ... -
这代码怎么就打印出"hello world"了呢?
2014-06-08 00:37 7401for (long l = 4946144450195624L ... -
最短时间过桥
2014-04-21 22:03 4158本文用代码实现最短时间过桥,并且打印如下两个例子的最小过桥时间 ... -
将数组分割成差值最小的子集
2014-04-20 22:34 2906本文使用位掩码实现一个功能 ==》将数组分割成差值最小的子集 ...
相关推荐
下面,我们将详细解析文件中的部分知识点,包括但不限于编译Java应用程序、基本数据类型、运算符、控制结构、方法定义、类与对象的概念、异常处理等。 ### 编译Java Application Java源代码文件以`.java`为扩展名...
- 选项:(A) 环境变量可在编译source code时指定 (B) 在编译程序时,所能指定的环境变量不包括classpath (C) javac一次可同时编译数个Java源文件 (D) javac.exe能指定编译结果要置于哪个目录(directory) ...
+ 先将所有值为0的数移至行首 + 能后从行尾开始逐一和前一个数比较,如果相等则合并这2个格子 * 每合并一次格子,将其值累计到游戏总分中 * 一次移动结束后,在所有值为0的方格中随机的分配一个2/4的值 * 所有方格...
7. 数组操作和条件判断:给定的代码片段中,只对奇数位置的数组元素求和,结果为120。 8. Java的继承特性:单个类只能继承一个父类,但可以通过实现多个接口来达到多重继承的效果。 三、程序运行结果: 1. `...
解析:循环执行一次后,a变为-1,不再满足while条件,因此循环停止,最后c的值为-1。 7. 下列哪一种叙述是正确的? 正确答案:D.声明抽象方法不可写出大括号 解析:抽象方法没有方法体,只有方法签名,不需要大...
- **解释**:Java程序主要有三种类型:应用程序(Application)、小程序(Applet)和服务器端应用(Servlet)。因此,正确答案是B:Applet、C:Application、D:Servlet。 #### 2. 编译环境变量 - **知识点**:编译...
- **解析**: 数组在 Java 中确实被视为对象,但并不是原生类。数组的大小一旦定义就不能更改,因此选项 c 的定义方式是错误的。 5. **不能用来修饰 interface 的有()** - **选项**: a.privateb.publicc.protected...
循环中`i`的值分别为0、1、2,对应的数组元素分别为`x[0][2]`、`x[1][1]`、`x[2][0]`,即3、5、7。 #### 题目20: 条件分支语句 **题目:** 有如下程序,运行后的输出结果是【】。 ```c main(){ int a = 10, b = 4, ...
10. **异常抛出**:程序可以抛出自定义异常,也可以抛出内置的Java异常。 11. **import语句**:`import`语句用于导入特定的类,这里的`Applet`代表一个类。 12. **引用数据类型**:数组、类和接口都属于引用数据...
1. **框架与布局**:计算器应用程序基于JFrame构建,主容器使用BorderLayout,文本框置于"North"区域,按钮面板(JPanel)置于"Center"区域,采用GridLayout进行布局。 2. **事件监听**:按钮事件处理主要在...
这是因为在C语言中,如果数组初始化列表中的元素少于数组的总大小,那么剩余的元素将被自动填充为0。 ### 2. Windows的目录结构 **知识点概述:** Windows操作系统采用树形结构来组织文件和目录。 **详细解释:**...
2. Java 程序经编译后会产生 byte code,而不是 machine code。 3. Java 语言的 constructor 必须与 class 同名,但方法不能与 class 同名。 二、面向对象编程 1. 类中的 constructor 不可省略,但可以有多个 ...
因此,正确答案是B(在编译程序时,所能指定的环境变量不包括classpath)、C(javac一次可同时编译数个Java源文件)、D(javac.exe能指定编译结果要置于哪个目录)。 **3. 下列标识符不合法的有()** - **解析:**...
因此,即使在实际使用中不需要,也应当确保字符数组的最后一个字符为`'\0'`。 ### 22. 创建宏时的必要元素 - **知识点概述**:创建宏时必须定义的元素。 - **详细解释**:在创建宏的过程中,需要定义宏名、宏操作...
1. **数组赋值**:使用 `ARR = 3` 对一个已声明的数组赋值,将会把数组的所有数值元素赋值为 3。 ### CardLayout 布局管理器特性 1. **CardLayout 特性**:CardLayout 布局管理器能够将界面视为一系列卡片,一次仅...
16. Java日期类库:Date、Calendar和DateFormat类确实位于`java.util`包中,但该表述可能源于较早版本的Java,因为从Java 8开始,日期和时间API已被更新,新引入了`java.time`包。 17. 乘法和取整运算:在某些编程...
6. Java数据类型转换:在Java中,`Integer.parseInt("12")`将字符串转换为整数类型变量,`Integer.valueOf("12").intValue()`同样如此,因此a和b都是整数类型变量且值相等。 7. HTTP协议:HTTP是HyperText Transfer...
18. `Val`函数在VBScript中用于将字符串转换为数值,如果字符串包含非数字字符,`Val`函数会忽略这些字符,所以`Val("123ab")`的结果是`123`。 19. Java的反汇编命令是`javap`,它可以用来查看Java字节码。 20. ...
- **解析**: 题目中的Java程序尝试访问一个未显式初始化的数组的第一个元素。在Java中,对于整型数组,如果没有显式初始化,则数组元素默认初始化为0。因此,输出的结果是0。选项C(输出零)正确。 - **扩展**: 对于...