0

我有一个java问题。

我有两个int[]数组:cdncmn.
cdn是 我需要一个程序,将 upto 的连续整数相加{1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
cmn并返回加法中使用的整数个数。然后它从upto的下一个整数继续相加并返回整数个数。对于上面的数组,这样做了 3 次:第一次返回值为 7,第二次返回值为 7,第三次返回值为 16。可以收集的整数个数为. 我的代码是:{8,8,16}
cdn[]cmn[init]cdn[]cmn[init+1]int[]{7,7,16}

int numofints = 0;
int init = 0;
int plus = 0;
while(init < m2){
 for(int j = 0; j < cdn.length; j++){
    plus += cdn[j];
    numofints++;
  if(plus == cmn[init]){
   init++;
  }
 }
}
System.out.print(numofints);

其中m2是 的大小cmn,在这种情况下为 3。请注意,我的程序从头开始cdn一遍又一遍地循环,因为j = 0. 我希望它从上次结束的地方开始!我希望你有我的解决方案。

比约恩

4

2 回答 2

2

只需拉出j外循环,并使用 awhile代替for, 用于内循环

你还需要放入plus = 0循环中

public class T {
  public static void main(String[] args) {
    int[] cdn = {1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
    int[] cmn = {8,8,16};

    int numofints = 0;
    int init = 0;
    int m2 = 3;

    int j = 0;
    while(init < m2){
     int plus = 0;
     while(j < cdn.length){
        plus += cdn[j];
        j++;
        numofints++;
        if(plus == cmn[init]){
          init++;
          System.out.println(j);
          break;
        } 
      }
    if (j == cdn.length) break;
    }
  }
}
于 2013-03-13T22:14:15.920 回答
0

if(plus == cmn[init]){应该if(plus >= cmn[init])吗?如果您完全更改 cdn 并且“加号”恰好超过“cmn [init]”,那么您的代码将会中断。

于 2013-03-13T22:36:40.390 回答