2013-02-07 33 views
0

我真的很困惑如何使用java的每个 - 正确的循环。谁能帮我?在java中的扩展collalating计算

好的,这是交易。我有一个扩展的Collat​​z问题,我无法摆脱我的头脑。问题是我想列出两个变量x和y之间的范围的所有Collat​​z迭代,其中x> y的范围为0-10000。我的问题是,在第二个foor-loop中,我想对每个数值执行整个collat​​z计算,所以如果value = 7,我想计算x = 7(16)的collat​​z迭代,直到y = 19(20),整个序列是16,3,19,6,14,9,9,17,17,4,12,20,20。我在Java中这样做。

import java.util。 ; import java.lang。;

公共类hackCollat​​z {

public static void main(String[] args){ 

    Scanner input = new Scanner(System.in); 

    int x; 
    int y; 
    int result = 0; 

    System.err.print("Sätt ett värde på x: "); 
    x = input.nextInt(); 
    System.err.print("Sätt ett värde på y: "); 
    y = input.nextInt(); 

    List<Integer> storeValue = new ArrayList<Integer>(); 

    for(int i=x; i<=y; i++){ 
     int value = i; 
     storeValue.add(value); 
     }  

    for(Integer value : storeValue){ 
     for(int j = value; j > 1; j++){ 
      if(j % 2 == 0){ 
       j=j/2; 
      // System.out.println(j); 
       result++; 

      } 
      else{ 
       j=j*3+1; 
       result++; 
     //  System.out.println(j); 
      } 
     } 
     } 
     System.out.println(result); 
     }  

}

+0

'for(int j = value; j> 1; j ++)'..这不会导致无限循环吗?除非我错过了一些东西,因为'j'随着每次迭代而增加,它总是大于1.你应该用'j - '代替。 – Th3Cuber

+0

啊,我会试试。我累了。 ;) 但它仍然无法按预期工作。我真的很困惑... –

+0

哦,我看到了问题。根本不需要在迭代期间修改'j'。因此,只需使用'for(int j = value; j> 1;)'(因为您在循环内部修改了'j')。 – Th3Cuber

回答

0

如果你改变你内心的for循环:for(int j = value; j > 1;),那么如果value = 7,将采取16次迭代为达到值1(预期)。