2015-09-06 84 views
1

当时做了一些Java的做法,我被困在这个特别的问题,我给下面的代码:的Java For循环实践

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 

而且我应该修改使用单一的代码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

听起来像你需要重新阅读本章。提示:您有2个变量,一个用于从'1'到'numberOfElements'的循环计数,另一个用于打印值。 – Andreas

+0

从1开始计数到我得到的numberOfElements的循环,这是获取打印出的值给我的问题。似乎无法得到逻辑正确的价值增加2然后4然后6然后8随后。 – Alfred

+0

在那个片段中,你不需要'j'。 'i + j'与'i * 3'相同。另外,你可以用'int'来'System.out.print'。即使你不能,'+“”'是非常糟糕的做法,你应该使用'Integer.toString(z)'。 – bcsb1001

回答

0

下面是完成预期结果的代码。

int current = 1;  

for(int i = 0; i < numberOfElements; i++) { 

    current += i*2; 
    System.out.print(current + " "); 
} 
0

在你的情况,你再生int z每次循环被调用时, 所有你需要做的就是定义z上的外循环和实例z1也,你是不是保留的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    

    } 
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) + " "); 
} 

UPDATE:编辑完你的代码段你的问题后,你可以看到你的问题是这一行:

int z = i + j; //sum 

由于ij都随着每次迭代而前进,所以失去了偏移量(您经常重置它)。你需要保持静态(如我的例子:1),并且每次迭代只更新j通过2*i,否则计算的“基数”会不断变化,公式不再成立。

0

请注意趋势。

您正在为前一个数字添加2的倍数以获取下一个数字。 2的倍数取决于数字的位置。例如,要获得第一个数字,请将2 x 0添加到1。要获得第二个数字,你可以将2 x 1加到前一个数字(即给出3)。要获得第三个号码,您将2 x 2添加到前一个号码(即给出7)。要获得第四个数字,您将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 
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(); 
    } 
}