2011-04-17 61 views
-1

我試圖來連接在嵌套循環計數器,與具有較小的最大內循環,這樣我的輸出應爲:印刷櫃檯

1.1 
1.2 
1.3 
1.4 
2.1 
2.2 
2.3 
2.4.... 

當內循環完成它的週期然後在父環路再次啓動時重新啓動。

現在我有

import java.io.BufferedWriter; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.PrintWriter; 
public class ForLoop 
{ 

    public static void main(String[] args) throws Exception{ 
     try { 
      PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("/Users/evanlivingston/1.txt", true))); 

     for (int counter = 0; counter <= 15; counter++) 
      out.println(counter); 
      for (int counter2 = 0; counter2 <=4; counter2++) 
       out.print(counter2); 
     out.close(); 
     } catch (IOException e) { 
     } 
    } 
} 

好像我必須構建由變量(計數器)變量,然後打印。

+1

'for'循環沒有嵌套在這裏,因此您認爲如果您不保留'{}'' for','for'後面只有一條語句被認爲是在循環之內 – Mahesh 2011-04-17 19:32:44

+1

如果你使用的是像Eclipse或NetBeans這樣的IDE,告訴它自動格式化你的代碼,你會發現你的縮進(控制流你想要的)不是你實際編程的控制流程 – 2011-04-17 19:40:00

回答

1

除了缺少的嵌套,你在內環打印外值:

public class ForLoop 
{ 
    public static void main (String[] args) 
    { 
     for (int outer = 0; outer <= 15; ++outer) 
      for (int inner = 0; inner <=4; ++inner) 
       System.out.println (outer + "." + inner); 
    } 
} 

但由於每個表達式只有一條線,我們可以在這裏省略花括號。 :)(更精確:第二個for循環由2行組成,但第二個由第一行覆蓋,因此它是外部'for'的一個表達式。

對於循環,通常使用i和j。如果不是,則採用比counter更合理的名稱,這是一個實現細節,而不是語義名稱。

3

它並不總是一個好主意,使用循環無括號:

import java.io.BufferedWriter; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.PrintWriter; 
public class ForLoop 
{ 

    public static void main(String[] args) throws Exception{ 
     try { 
      PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("/Users/evanlivingston/1.txt", true))); 

     String output = ""; 
     for (int counter = 1; counter < 16; counter++) { 
      output = Integer.toString(counter) + "."; 
      for (int counter2 = 1; counter2 < 5; counter2++) { 
       out.print(test + Integer.toString(counter2) + "\n"); 
      } 
     } 
     out.close(); 
     } catch (IOException e) { 
     } 
    } 
} 

如果不圍繞使用大括號您的語句,只for語句的下一行是在循環使用。所以你的for循環並不是真正的嵌套。

+2

括號是圓括號,我想你是在說大括號 – 2011-04-17 19:34:22

+0

這是真的。我的英語不是很有天賦,但我糾正了它。謝謝。 – RoflcoptrException 2011-04-17 19:38:18

1

值得注意的是你的for循環沒有嵌套。像這樣的錯誤是Java的每個編碼標準的原因,我甚至看到要求使用{}來指示應該爲每個迭代執行語句。

0

你應該考慮一些事情:

  • 始終相應地格式化你的代碼。它減少了您在確定代碼流時犯錯的可能性。
  • 務必確保您正在關閉手柄。一個好的做法是始終將close()放在finally塊中,以確保它不管被調用。或者,如果您使用C#,只需使用using(){}構造爲您執行此操作。
  • 數值計算通常比字符串連接更快,特別是在規模上。

這裏有一個替代解決方案的人提出:

public static void main(String[] args) throws IOException { 

    PrintWriter out = null; 

    try { 

     out = new PrintWriter(
      new BufferedWriter(new FileWriter(yourFileName, true))); 

     for (float i = 1.0F; i < 16; i += 0.1F) { 
      out.println(String.format("%.1f", i)); 
      if(i >= (((int)i) + 0.4)) 
      { 
       i += 0.5; 
      } 
     } 

    } finally { 
     if(out != null) 
     { 
      out.close(); 
     } 
    } 

} 
+0

此方法是否可縮放以生成字符串,如10.2.5.2,10.2.5.3 ... – evanlivingston 2011-04-18 01:35:36