当前位置:编程学习 > JAVA >>

关于两个数组整合为一个的问题

我现在有两个知道长度的数组,比如说al.size()=33  al2.size()=50;
1.将这两个数组中的元素,按照当al放3个元素,al2就得放7个元素的比例 逐个的放入一个10元素为一批新的数组中;
2.如果最后al2不够7个了只剩下了6个,而al1还有4个元素以上,那么由al1就向后多拿出1个元素,al2全拿出来,(al1:4 al2:6)比例可以不是3:7,但是总数一定要到3+7=10,
3.如果最后连10个都没有,那么有多少就放多少
 结果
写个方法通过al1 al2 把这个新数组组合起来 --------------------编程问答-------------------- 不知道解释的清不清楚 , 在线等。。 --------------------编程问答-------------------- 先实例化一个新数组。新数组长度肯定是83吧。
while询盘判断al1和al2的长度,大于3和7的话进行下面的。
{
新数组的前三个由al1的前三个赋值给,后7个由al2赋值。
并记录al1,al2的下标,下一次从下标的下一个开始。
}
不符合的话这情况再写一个处理一下就行了。 --------------------编程问答--------------------
int a[]={1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1};
int b[]={4,5,6,7,8,9,10,4,5,6,7,8,9,10,4,5,6,7,8,9,10,4,5,6,7,8,9,10,4,5,6,7,8,9,10,4,5,6,7,8,9,10,4,5,6,7,8,9,10,4,5,6};
int c[]=new int[a.length+b.length];
int i=0,j=0;
for(;i<a.length && j<b.length;){
if((i+j)%10<3 || b.length-j+(i+j)%10<10)//前三个,或者b不足7个时,比如6个,则是前4个
c[i+j]=a[i++];
else
c[i+j]=b[j++];
}
for(;i<a.length;i++){
c[i+j]=a[i];
}
for(;j<b.length;j++){
c[i+j]=b[j];
}

for(i=0;i<c.length;i++)
System.out.println(c[i]);
--------------------编程问答--------------------

import java.util.Arrays;

public class Test {
public static void main(String[] args) {
int[] a1 = new int[33];
int[] a2 = new int[50];
// 初始化
for (int i = 0; i < a1.length; ++i) {
a1[i] = 101 + i;
}
for (int i = 0; i < a2.length; ++i) {
a2[i] = 201 + i;
}
System.out.println(Arrays.toString(union(a1, a2)));
}

private static int[] union(int[] a1, int[] a2) {
int[] result = new int[a1.length + a2.length];
final int count1 = 3, count2 = 7,count = count1 + count2;
int i1 = 0, i2 = 0, i3 = 0;
while (i1 + count1 < a1.length && i2 + count2 < a2.length) {
for (int i = 0; i < count1; ++i) {
result[i3++] = a1[i1++];
}
for (int i = 0; i < count2; ++i) {
result[i3++] = a2[i2++];
}
}
if (a1.length - i1 > a2.length - i2
&& (a1.length + a2.length - i1 - i2 > count)) {
for (int i = 0; i < count - (a2.length - i2); ++i) {
result[i3++] = a1[i1++];
}
for (int i = i2; i < a2.length; ++i) {
result[i3++] = a2[i2++];
}
}
for (int i = i1; i < a1.length; ++i) {
result[i3++] = a1[i1++];
}
for (int i = i2; i < a2.length; ++i) {
result[i3++] = a2[i2++];
}
return result;
}

}

--------------------编程问答-------------------- 刚刚说的不是很清楚。。,我想得到的结果是
[[a1,a2,a3,b1,b2,b3,b4,b5,b6,b7],[a4,a5,a4,b8,b9,b10,b11,b12,b13,b14],[..],[..],....]
--------------------编程问答--------------------
引用 5 楼 hotsaysauce2 的回复:
刚刚说的不是很清楚。。,我想得到的结果是
[[a1,a2,a3,b1,b2,b3,b4,b5,b6,b7],[a4,a5,a4,b8,b9,b10,b11,b12,b13,b14],[..],[..],....]

你的数组是什么类型的?
你想得到多个数组?每个数组10个元素?
还是一个二维数组? --------------------编程问答--------------------
引用 5 楼 hotsaysauce2 的回复:
刚刚说的不是很清楚。。,我想得到的结果是
[[a1,a2,a3,b1,b2,b3,b4,b5,b6,b7],[a4,a5,a4,b8,b9,b10,b11,b12,b13,b14],[..],[..],....]




import java.util.ArrayList;
import java.util.Arrays;

public class Test {
public static void main(String[] args) {
int[] a1 = new int[33];
int[] a2 = new int[50];
// 初始化
for (int i = 0; i < a1.length; ++i) {
a1[i] = 101 + i;
}
for (int i = 0; i < a2.length; ++i) {
a2[i] = 201 + i;
}
ArrayList<int[]> list = union(a1, a2);
for (int[] arr : list) {
System.out.println(Arrays.toString(arr));
}
}

private static ArrayList<int[]> union(int[] a1, int[] a2) {
int[] a3 = new int[a1.length + a2.length];
final int count1 = 3, count2 = 7, count = count1 + count2;
int i1 = 0, i2 = 0, i3 = 0;
while (i1 + count1 < a1.length && i2 + count2 < a2.length) {
for (int i = 0; i < count1; ++i) {
a3[i3++] = a1[i1++];
}
for (int i = 0; i < count2; ++i) {
a3[i3++] = a2[i2++];
}
}
if (a1.length - i1 > a2.length - i2
&& (a1.length + a2.length - i1 - i2 > count)) {
for (int i = 0; i < count - (a2.length - i2); ++i) {
a3[i3++] = a1[i1++];
}
for (int i = i2; i < a2.length; ++i) {
a3[i3++] = a2[i2++];
}
}
for (int i = i1; i < a1.length; ++i) {
a3[i3++] = a1[i1++];
}
for (int i = i2; i < a2.length; ++i) {
a3[i3++] = a2[i2++];
}
ArrayList<int[]> result = new ArrayList<int[]>();
for (int i = 0; i < a3.length; i += count) {
int offset = i + count < a3.length ? count : a3.length - i;
int[] arr = Arrays.copyOfRange(a3, i, i + offset);
result.add(arr);
}
return result;
}

}

--------------------编程问答-------------------- 我想得到多个数组,每个数组10个元素
然后在把这些数组放到一个新数组里面 --------------------编程问答--------------------
引用 8 楼 hotsaysauce2 的回复:
我想得到多个数组,每个数组10个元素
然后在把这些数组放到一个新数组里面

我把它放到二维数组了,现在的问题就是最后一行可能不足10个,后面的是0
所以你打印的时候判断到a.length+b.length就可以了
int a[] = { 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2,
3, 1, 2, 3, 1, 2, 3 };
int b[] = { 4, 5, 6, 7, 8, 9, 10, 4, 5, 6, 7, 8, 9, 10, 4, 5, 6, 7, 8,
9, 10, 4, 5, 6, 7, 8, 9, 10, 4, 5, 6, 7, 8, 9, 10, 4, 5, 6, 7,
8, 9, 10, 4, 5, 6, 7, 8, 9, 10, 4, 5, 6 };
int c[][] = new int[(a.length + b.length) / 10 + 1][10];
int i = 0, j = 0;
for (; i < a.length && j < b.length;) {
if ((i + j) % 10 < 3 || b.length - j + (i + j) % 10 < 10)// 前三个,或者b不足7个时,比如6个,则是前4个
c[(i + j) / 10][(i + j) % 10] = a[i++];
else
c[(i + j) / 10][(i + j) % 10] = b[j++];
}
for (; i < a.length; i++) {
c[(i + j) / 10][(i + j) % 10] = a[i];
}
for (; j < b.length; j++) {
c[(i + j) / 10][(i + j) % 10] = b[j];
}

for (i = 0; i < c.length; i++) {
for (j = 0; j < 10; j++)
System.out.print(c[i][j] + " ");
System.out.println();
}
--------------------编程问答--------------------
引用 9 楼 abc41106 的回复:
引用 8 楼 hotsaysauce2 的回复:
我想得到多个数组,每个数组10个元素
然后在把这些数组放到一个新数组里面
我把它放到二维数组了,现在的问题就是最后一行可能不足10个,后面的是0
所以你打印的时候判断到a.length+b.length就可以了


Java code
?



1234567891011121314151617181920212223242……



如果a1最后还有2个 a2最后还有9个 你可有算否? --------------------编程问答--------------------
引用 10 楼 liu4626846 的回复:
引用 9 楼 abc41106 的回复:引用 8 楼 hotsaysauce2 的回复:
我想得到多个数组,每个数组10个元素
然后在把这些数组放到一个新数组里面
我把它放到二维数组了,现在的问题就是最后一行可能不足10个,后面的是0
所以你打印的时候判断到a.length+b.length就可以了


Java code
?



1234567……

算了啊。。
int a[] = { 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2 };
int b[] = { 4, 5, 6, 7, 8, 9, 10, 4, 5, 6, 7, 8, 9, 10, 4, 5, 6, 7, 8,
9, 10, 4, 5, 6, 7, 8, 9, 10, 4, 5, 6, 7, 8, 9, 10, 4, 5, 6, 7,
8, 9, 10, 4, 5, 6, 7, 8, 9, 10, 4, 5 };

1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
1 2 4 5 6 7 8 9 10 4 
5 0 0 0 0 0 0 0 0 0
--------------------编程问答--------------------
引用 10 楼 liu4626846 的回复:
引用 9 楼 abc41106 的回复:引用 8 楼 hotsaysauce2 的回复:
我想得到多个数组,每个数组10个元素
然后在把这些数组放到一个新数组里面
我把它放到二维数组了,现在的问题就是最后一行可能不足10个,后面的是0
所以你打印的时候判断到a.length+b.length就可以了


Java code
?



1234567……

我明白你的意思了,如果a后面2个,b后面8个,我的最后一行全是0,是多余的了。 --------------------编程问答-------------------- 高手 我的想把那两个数组都换成ArrayList<String>的 该怎么改?? --------------------编程问答--------------------
int c[][] = new int[(a.length + b.length) / 10 + 1][10];

把这一行改成这样好了。。
int c[][] = new int[(a.length + b.length + 9) / 10][10];
--------------------编程问答--------------------
引用 9 楼 abc41106 的回复:
引用 8 楼 hotsaysauce2 的回复:
我想得到多个数组,每个数组10个元素
然后在把这些数组放到一个新数组里面
我把它放到二维数组了,现在的问题就是最后一行可能不足10个,后面的是0
所以你打印的时候判断到a.length+b.length就可以了


Java code
?



1234567891011121314151617181920212223242……


我说的你没弄清楚 你的算法有问题


int a[] = { 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2,
3, 1, 2, 3, 1, 2, 3 ,4,5};
int b[] = { 4, 5, 6, 7, 8, 9, 10, 4, 5, 6, 7, 8, 9, 10, 4, 5, 6, 7, 8,
9, 10, 4, 5, 6, 7, 8, 9, 10, 4, 5, 6, 7, 8, 9, 10, 4, 5, 6, 7,
8, 9, 10, 4, 5, 6, 7, 8, 9, 10, 4, 5, 6,16,26,36,46,56,66 };

试试这个参数用你的算法算 --------------------编程问答--------------------
引用 15 楼 liu4626846 的回复:
引用 9 楼 abc41106 的回复:
引用 8 楼 hotsaysauce2 的回复:
我想得到多个数组,每个数组10个元素
然后在把这些数组放到一个新数组里面
我把它放到二维数组了,现在的问题就是最后一行可能不足10个,后面的是0
所以你打印的时候判断到a.length+b.length就可以了


Java code
?



123456789101112131……


弄错了! --------------------编程问答-------------------- 高手 我的两个数组存放的都是String类型的元素 我的想把那两个数组都换成ArrayList<String>的 该怎么改??
private static ArrayList union(ArrayList<String>  a1, ArrayList<String>  a2) {
.....
里面改成什么
.....
} --------------------编程问答--------------------
引用 17 楼 hotsaysauce2 的回复:
高手 我的两个数组存放的都是String类型的元素 我的想把那两个数组都换成ArrayList<String>的 该怎么改??
private static ArrayList union(ArrayList<String>  a1, ArrayList<String>  a2) {
.....
里面改成什么
.....
}

	public static ArrayList<ArrayList<String>> merge(ArrayList<String> a,
ArrayList<String> b) {
ArrayList<ArrayList<String>> result = new ArrayList<ArrayList<String>>();
ArrayList<String> temp = null;
int i = 0, j = 0;
for (; i < a.size() || j < b.size();) {
if ((i + j) % 10 == 0) {
if (temp != null)
result.add(temp);
temp = new ArrayList<String>();
}
if (i < a.size()
&& ((i + j) % 10 < 3 || b.size() - j + (i + j) % 10 < 10 || j >= b
.size()))
temp.add(a.get(i++));
else
temp.add(b.get(j++));
}
result.add(temp);
return result;
}

ArrayList没怎么用过,不知道会不会有问题。 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 好复杂,学习了 --------------------编程问答-------------------- --------------------编程问答-------------------- 用linkedlist写了个,最后返回的是一个一维数组。也还好改啦
public class arrylist {



public String[] join(String[] a,String[] b){

//验证了linkedlist是个环状结构

LinkedList<String> al = new LinkedList<String>();
for(int i = 0 , length = a.length;i<length;i++){
al.add(a[i]);
}
LinkedList<String> bl = new LinkedList<String>();
for(int i = 0 , length = b.length;i<length;i++){
bl.add(b[i]);
}

LinkedList<String> cl = new LinkedList<String>(); 

while(al.size() != 0){
if(bl.size()>7){
for(int i=0;i<3;i++){
if(al.peek() != null){
cl.add(al.pollFirst());
}else{
break;
}

}
for(int l=0;l<7;l++){
if(bl.peek() != null){
cl.add(bl.pollFirst());
}else {
break;
}

}
}else{
for(int i = 0,lengtha = (10-bl.size());i < lengtha;i++){
if(al.peek() != null){
cl.add(al.pollFirst());
}else{
break;
}
}
for(int l=0,lengthb = bl.size();l<lengthb;l++ ){
if(bl.peek() != null){
cl.add(bl.pollFirst());
}else {
break;
}
}
}
}

String[] tmp= new String[]{};

if(cl.isEmpty()){
return tmp;
}else{
tmp = cl.toArray(new String[0]); 
return tmp;
}


}

public static void main(String[] args){
 String[] A = {};
 String[] B = {};

 arrylist test = new arrylist();
 test.join(A,B);
 
}

}
--------------------编程问答-------------------- 自己调了下有个地方有BUG
while语句得改一下
while(!(al.size() == 0 && bl.size() == 0))
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,