我现在有两个知道长度的数组,比如说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 把这个新数组组合起来
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 把这个新数组组合起来
while询盘判断al1和al2的长度,大于3和7的话进行下面的。
{
新数组的前三个由al1的前三个赋值给,后7个由al2赋值。
并记录al1,al2的下标,下一次从下标的下一个开始。
}
不符合的话这情况再写一个处理一下就行了。
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],[..],[..],....]
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;
}}
所以你打印的时候判断到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();
}
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
把这一行改成这样好了。。
int c[][] = new int[(a.length + b.length + 9) / 10][10];
我说的你没弄清楚 你的算法有问题
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 };试试这个参数用你的算法算
private static ArrayList union(ArrayList<String> a1, ArrayList<String> a2) {
.....
里面改成什么
.....
}
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没怎么用过,不知道会不会有问题。
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);
}
}
while语句得改一下
while(!(al.size() == 0 && bl.size() == 0))