2011-09-07 8 views
1

次のコードは動作しますが、書きませんでした。コンピュータのポート名を調べ、指定された文字列(RxTxシリアル通信の場合)に一致させようとします。Java:シリアルポートの列挙とforループ

私の質問は、forループ内のステートメントは何ですか?私は決して他のアレンジメントを見たことがありません(初期化;条件テスト;反復子)ステートメント;

私は、(String portName:PORT_NAMES)の部分と ":"演算子が何をしているのかを尋ねていますか?

private static final String PORT_NAMES[] = { 
     "/dev/tty.usbserial-A9007UX1", // Mac OS X 
     "/dev/ttyUSB0", // Linux 
     "COM4", // Windows 
     }; 

     CommPortIdentifier portId = null; 
    Enumeration portEnum = CommPortIdentifier.getPortIdentifiers(); 

    // iterate through, looking for the port 
    while (portEnum.hasMoreElements()) { 
     CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement(); 
     for (String portName : PORT_NAMES) { 
      if (currPortId.getName().equals(portName)) { 
       portId = currPortId; 
       break; 
      } 
     } 
    } 

おかげ

答えて

0

これはJavaであるため、各声明。それは:符号の後に指定されたコレクションのすべての要素を反復処理します。

0

これは私が "extended for"ループと呼ばれていたことを覚えていることです。これは基本的にC#の "foreach"演算子のJavaに相当します。 PORT_NAMES列挙体のStringオブジェクトを反復処理します。

EDIT:Linkyはhttp://leepoint.net/notes-java/flow/loops/foreach.html

+0

PORT_NAMESが列挙、文字列のその配列ではありません。詳細については、Oracleのマニュアルを参照してください。 – Lynch

+0

私はそれも配列で動作すると思います。 – iandisme

0

これはJDK 1.5以来親しまれているJava用-各構築物です。これは、基本的にはこれに相当します。

for (int i = 0; i < PORT_NAMES.length; ++i) { 
    String portName = PORT_NAMES[i]; 
    etc... 
} 

は、これはループのどこにも使用されていないインデックス変数を使用するよりも、配列またはコレクションを反復処理するためのよりよい方法です。

http://download.oracle.com/javase/1,5.0/docs/guide/language/foreach.html