Skip to content

Commit 7afb4b1

Browse files
authored
Merge pull request onlyliuxin#28 from 592146505/master
实现简单的struts和数组操作
2 parents 16123c4 + 3ce3394 commit 7afb4b1

File tree

14 files changed

+702
-188
lines changed

14 files changed

+702
-188
lines changed

group20/592146505/array_util/src/org/wsc/array/ArrayUtil.java

-122
This file was deleted.

group20/592146505/array_util/src/org/wsc/array/ArrayUtilTest.java

-41
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,232 @@
1+
package org.wsc.array;
2+
3+
public class ArrayUtil {
4+
/**
5+
* 给定一个整形数组a , 对该数组的值进行置换 例如: a = [7, 9 , 30, 3] , 置换后为 [3, 30, 9,7] 如果 a =
6+
* [7, 9, 30, 3, 4] , 置换后为 [4,3, 30 , 9,7]
7+
*
8+
* @param origin
9+
* @return
10+
*/
11+
public static void reverseArray(int[] origin) {
12+
// 折半
13+
for (int i = 0; i < (origin.length >> 1); i++) {
14+
int num = origin[i];
15+
origin[i] = origin[origin.length - 1 - i];
16+
origin[origin.length - 1 - i] = num;
17+
}
18+
}
19+
20+
/**
21+
* 现在有如下的一个数组: int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5}
22+
* 要求将以上数组中值为0的项去掉,将不为0的值存入一个新的数组,生成的新数组为: {1,3,4,5,6,6,5,4,7,6,7,5}
23+
*
24+
* @param oldArray
25+
* @return
26+
*/
27+
public static int[] removeZero(int[] oldArray) {
28+
int count = 0;// 计数器
29+
/*
30+
* 利用冒泡,将0元素向后排 {1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5}
31+
* {1,3,4,5,0,6,6,0,5,4,7,6,7,0,5,0} {1,3,4,5,6,6,0,5,4,7,6,7,0,5,0,0}
32+
* ....
33+
*/
34+
for (int i = 0; i < oldArray.length - count; i++) {
35+
// 索引为i的元素为0,则依次将索引i的元素与i+1的元素对换
36+
if (oldArray[i] == 0) {
37+
for (int j = i; j < oldArray.length - 1 - count; j++) {
38+
int num = oldArray[j];
39+
oldArray[j] = oldArray[j + 1];
40+
oldArray[j + 1] = num;
41+
}
42+
count++;// 计数器+1
43+
i--;// 防止原索引i+1位置的元素为0,
44+
}
45+
}
46+
// 创建新数组
47+
int[] newArray = new int[oldArray.length - count];
48+
System.arraycopy(oldArray, 0, newArray, 0, newArray.length);
49+
return newArray;
50+
}
51+
52+
/**
53+
* 现在有如下的一个数组: int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5}
54+
* 要求将以上数组中值为0的项去掉,将不为0的值存入一个新的数组,生成的新数组为: {1,3,4,5,6,6,5,4,7,6,7,5}
55+
*
56+
* @param oldArray
57+
* @return
58+
*/
59+
public static int[] removeZero2(int[] oldArray) {
60+
int count = 0;// 计数器
61+
for (int i = 0; i < oldArray.length; i++) {
62+
if (oldArray[i] == 0)
63+
count++;// 计数器+1
64+
}
65+
// 创建新数组
66+
int[] newArray = new int[oldArray.length - count];
67+
for (int i = 0, j = 0; i < oldArray.length; i++) {
68+
if (oldArray[i] != 0) {
69+
newArray[j] = oldArray[i];
70+
j++;
71+
}
72+
}
73+
return newArray;
74+
}
75+
76+
/**
77+
* 给定两个已经排序好的整形数组, a1和a2 , 创建一个新的数组a3, 使得a3 包含a1和a2 的所有元素, 并且仍然是有序的 例如 a1 =
78+
* [3, 5, 7,8] a2 = [4, 5, 6,7] 则 a3 为[3,4,5,6,7,8] , 注意: 已经消除了重复
79+
*
80+
* @param array1
81+
* @param array2
82+
* @return
83+
*/
84+
85+
public static int[] merge(int[] array1, int[] array2) {
86+
int[] newArray = new int[array1.length + array2.length];
87+
int i = 0, j = 0, k = 0;
88+
while (i < array1.length && j < array2.length) {
89+
// <= 都取 array1
90+
if (array1[i] <= array2[j]) {
91+
// 等于时,将array2下标++
92+
if (array1[i] == array2[j])
93+
j++;
94+
newArray[k++] = array1[i++];
95+
} else
96+
newArray[k++] = array2[j++];
97+
98+
}
99+
// 将没有循环完毕的元素插入
100+
while (i < array1.length)
101+
newArray[k++] = array1[i++];
102+
while (j < array2.length)
103+
newArray[k++] = array2[j++];
104+
int[] result = newArray;
105+
// 长度缩短则新建数组
106+
if (k < newArray.length) {
107+
result = new int[k];
108+
for (int l = 0; l < result.length; l++)
109+
result[l] = newArray[l];
110+
}
111+
return result;
112+
}
113+
114+
/**
115+
* 把一个已经存满数据的数组 oldArray的容量进行扩展, 扩展后的新数据大小为oldArray.length + size
116+
* 注意,老数组的元素在新数组中需要保持 例如 oldArray = [2,3,6] , size = 3,则返回的新数组为
117+
* [2,3,6,0,0,0]
118+
*
119+
* @param oldArray
120+
* @param size
121+
* @return
122+
*/
123+
public static int[] grow(int[] oldArray, int size) {
124+
int[] newArray = new int[oldArray.length + size];
125+
for (int i = 0; i < oldArray.length; i++) {
126+
newArray[i] = oldArray[i];
127+
}
128+
return newArray;
129+
}
130+
131+
/**
132+
* 斐波那契数列为:1,1,2,3,5,8,13,21...... ,给定一个最大值, 返回小于该值的数列 例如, max = 15 ,
133+
* 则返回的数组应该为 [1,1,2,3,5,8,13] max = 1, 则返回空数组 []
134+
*
135+
* @param max
136+
* @return
137+
*/
138+
public static int[] fibonacci(int max) {
139+
if (max <= 1)
140+
return new int[] {};
141+
int[] nums = new int[max];
142+
nums[0] = nums[1] = 1;
143+
int flag;
144+
for (flag = 0; (flag < max - 2 && nums[flag] + nums[flag + 1] < max); flag++) {
145+
nums[flag + 2] = nums[flag] + nums[flag + 1];
146+
}
147+
// 创建新数组
148+
int[] newArray = nums;
149+
if (newArray.length != flag + 2) {
150+
newArray = new int[flag + 2];
151+
for (int i = 0; i < newArray.length; i++) {
152+
newArray[i] = nums[i];
153+
}
154+
}
155+
return newArray;
156+
}
157+
158+
/**
159+
* 返回小于给定最大值max的所有素数数组 例如max = 23, 返回的数组为[2,3,5,7,11,13,17,19]
160+
*
161+
* @param max
162+
* @return
163+
*/
164+
public static int[] getPrimes(int max) {
165+
int[] array = new int[max>>1];
166+
int flag = 0;
167+
for (int i = 2; i < max; i++) {
168+
int j;
169+
for (j = 2; j <= (i >> 1); j++) {
170+
if (i % j == 0)
171+
break;
172+
173+
}
174+
//如果大于,则证明j++有运行,已经完整对比
175+
if(j > i>>1)
176+
array[flag++] = i;
177+
178+
}
179+
int[] newArray = array;
180+
if(flag < array.length){
181+
newArray = new int[flag];
182+
for (int i = 0; i < newArray.length; i++) {
183+
newArray[i] = array[i];
184+
}
185+
}
186+
return newArray;
187+
}
188+
189+
/**
190+
* 所谓“完数”, 是指这个数恰好等于它的因子之和,例如6=1+2+3 给定一个最大值max, 返回一个数组, 数组中是小于max 的所有完数
191+
*
192+
* @param max
193+
* @return
194+
*/
195+
public static int[] getPerfectNumbers(int max) {
196+
int[] array = new int[max];
197+
int flag = 0;
198+
for (int i = 1; i < max; i++) {
199+
int sum = 0;
200+
for (int j = 1; j < i; j++) {
201+
if (i % j == 0)
202+
sum+=j;
203+
}
204+
//如果大于,则证明j++有运行,已经完整对比
205+
if(sum == i)
206+
array[flag++] = i;
207+
208+
}
209+
int[] newArray = array;
210+
if(flag < array.length){
211+
newArray = new int[flag];
212+
for (int i = 0; i < newArray.length; i++) {
213+
newArray[i] = array[i];
214+
}
215+
}
216+
return newArray;
217+
}
218+
219+
/**
220+
* 用seperator 把数组 array给连接起来 例如array= [3,8,9], seperator = "-" 则返回值为"3-8-9"
221+
*
222+
* @param array
223+
* @param s
224+
* @return
225+
*/
226+
public static String join(int[] array, String seperator) {
227+
String str = "";
228+
for (int i = 0; i < array.length; i++)
229+
str += i != array.length - 1 ? array[i] + seperator : array[i];
230+
return str;
231+
}
232+
}

0 commit comments

Comments
 (0)