正在做一些Java实践,我遇到了这个特殊的问题,我得到了以下代码:
public class DistanceSeparator {
public static void main(String[] args) {
printSeparatorSequence(3);
printSeparatorSequence(5);
printSeparatorSequence(8);
}
public static void printSeparatorSequence(int numberOfElements) {
for () {
}
System.out.println();
} //end of method printSeparatorSequence
} // end of class
我应该使用 A SINGLE FOR LOOP 修改代码以显示:
如果numberOfElements = 5
1 3 7 13 21
如果numberOfElements = 7
1 3 7 13 21 31 43
每个都显示+ 2,+ 4,+ 6,+ 8,+ 10和+12的增量 最终的结果是:
1 3 7
1 3 7 13 21
1 3 7 13 21 31 43 57
我似乎无法理解如何获得这个结果,这是经过2小时的尝试(是的,我很糟糕)。有什么帮助吗?
编辑这就是我所拥有的,在决定寻求帮助之前,它显然不起作用。
int j = 0;
for (int i = 1; i <= numberOfElements; i++) {
j = i * 2; // + by how much
int z = i + j; //sum
System.out.print(z + "");
}
编辑2 现在我明白了,哦,我的,认为我是如此接近。猜猜我被困了一段时间后太乱了。万分感谢!
答案 0 :(得分:0)
以下是完成预期结果的代码。
int current = 1;
for(int i = 0; i < numberOfElements; i++) {
current += i*2;
System.out.print(current + " ");
}
答案 1 :(得分:0)
在您的情况下,每次调用循环时都会重新生成int z
,
您所要做的就是在循环外定义z并将z
实例化为1
,同时,您不会保留z
的先前值,这就是它无法正常工作的原因。因此它应该是z = z + j
并将此行放在print
语句下方,您就完成了。
以下是一段代码,可以帮助您以我的方式:
int j = 1;
for(int i=1; i<=numberOfElements; i++) {
System.out.println(j);
j = j + 2*i;
}
而且,这里有一段代码可以帮助你以你的方式:
int j = 0;
int z = 1;
for (int i = 1; i <= numberOfElements; i++)
{
j = i * 2; // + by how much
System.out.print(z + " ");
z = z + j; //sum
}
答案 2 :(得分:0)
你只需要保留另一个变量来跟踪差异(变化),然后通过迭代2的幂来不断更新它,即对于第一个循环只增加2 ^ 1,然后通过2 ^ 2,然后2 ^ 3等等。
如何实现这一目标的一个例子:
for (int i = 0, diff = 0; i < numberOfElements; i++, diff += 2*i) {
System.out.print((1 + diff) + " ");
}
更新:使用您的代码段编辑问题后,您可以看到问题出在此行:
int z = i + j; //sum
由于每次迭代都会i
和j
前进,因此会丢失偏移量(您不断重置它)。你需要保持静态(比如在我的例子中:1),并且每次迭代只更新j
,否则你的计算“基数”会不断变化而且公式不再存在
答案 3 :(得分:0)
注意趋势。
您要为前一个数字添加2的倍数以获取下一个数字。要添加的2的倍数取决于数字的位置。例如,要获取第一个号码,请将2 x 0
添加到1
。要获得第二个数字,请将2 x 1
添加到上一个数字(即3)。要获得第3个数字,请将2 x 2
添加到上一个数字(即7)。要获得第4个数字,请将2 x 3
添加到上一个数字(给出13)。
要获取第n个位置的号码,请将2 x (n-1)
添加到上一个号码。
现在看一下下面的例子,记住上面的解释。
public static void printSeparatorSequence(int numberOfElements) {
int number = 1;
for (int i = 0; i<numberOfElements;i++) {
number = number + 2 * i;
System.out.print(number);
}
System.out.println();
} //end of method printSeparatorSequence
} // end of class
答案 4 :(得分:0)
这是您的问题的解决方案。我已经通过代码中给出的注释行讨论了代码。
public class DistanceSeparator
{
/* Main Method */
public static void main(String[] args)
{
/* printSeparatorSequence Function is Called */
printSeparatorSequence(3);
printSeparatorSequence(5);
printSeparatorSequence(8);
}
/* printSeparatorSequence Function Definition */
public static void printSeparatorSequence(int NumberOfElements)
{
/* variable j is used to get the multiples of
2 by multiplying with variable i within the for loop
and variable sum is used to get the total value */
int j=2,sum=1;
for(int i=0;i<NumberOfElements;i++)
{
sum=sum+(j*i);
/* Here total sum is printed with a space */
System.out.print(sum+" ");
}
/* It is used for new line */
System.out.println();
}
}