2015-09-06 80 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(); 
    } 
}