【发布时间】:2016-03-03 11:55:15
【问题描述】:
我正在尝试遍历一个数组:
public static String calculate(int [] bills,int amount){
int size = bills.length;
int cache = 0;
for (int i = 0; i < size; i++) {
cache+=bills[i];
if(cache==amount){
return "OK";
}
}
return "NO OK";
}
这将按此顺序通过数组(和总和):
1 2 5 7 = 1,3,8,15(总和)
但我想要的是这样的:
第一次迭代:1 2 5 7 = 1,3,8,15
第二次迭代:2 5 7 1 = 2,7,14,15
第三次迭代:5 7 1 2 = 5,12,13,15
第 4 次迭代:7 1 2 5 = 7,8,10,15
注意:我称 1st,2nd,3rd,4th 是因为我指的是 2 个循环的情况; 从技术上讲,我想做的是从第二次迭代开始,依此类推,当它到达 index[3] 时,它会转到 index[0] 并将它们相加。然后从 index[2] 开始,当得到 index[3] 时,它将 index[0] 和 [1] 相加。
我使用双 for(and j=i) 和 j(of the 2nd for) 以不同的方式进行了尝试 到达数组的最后一个位置(在这种情况下为 [3])将其更改为零并且 size=i(这将是它开始的点)但它不能正常工作...... 也可能它可以与(%模数)一起使用,但我想看看其他人的想法总是有助于学习:)谢谢大家!
PS:我用这个作为数组(忽略方法的数量部分,因为不是问题的一部分):
int[] bills = new int[] {1,2,5,7};
PSS:这是我尝试过的代码(使用双循环,它不是我犯的错误较少的代码,因为我错过了它,因为我删除并更改了很多尝试新的东西,而这个可能有可怕的错误。 .):
public static String calculate(int [] bills,int amount){
int size = bills.length;
int cache = 0;
int c = 1;
int z = size-1;
int s = 0;
int w = 0;
boolean TIME = false;
for (int i = w; i < size;) {
for (int j = i; j < size;j++){
cache+=bills[j];
if(cache==amount){
cache=0;
return "OK";
}
System.out.println(TIME);
if(i>0 && j==z && TIME){
size=i;
i=0;
TIME=false;
}
}
w++;
size=z+1;
cache=0;
TIME=true;
}
}
【问题讨论】:
-
为什么将数字相加的顺序很重要?
-
请展示您“尝试”了什么以及它与您想要的有何不同。
-
完成,谢谢。我想尝试一些可能性,而不是在这个 4 个整数的数组上使用递归,虽然有点蛮力...感谢您的帮助,感谢询问