1

telnet のクラス Java の結果をストックするときに、2 つの arrayList を比較したい。このクラスは、ルーターについて telnet するためのものであり、このルーターのすべてのインターフェースを提供し、それらを arrayList にストックするので、myData1 に router1 のインターフェースをストックする。 myData2 の 2 番目と私は、最初の配列のインターフェイスが 2 番目の配列と同じであるかどうかを比較します。結果 myData の配列にそれらの 1 つを追加するだけですが、コードに何かが表示されます

public class Test {

       public static void main(String[] args) {

    Connection conn = null;
     try { 
conn = DriverManager.getConnection("jdbc:mysql://localhost/mohammedia", "root", "123456"); 
String sql = "SELECT * FROM router;"; 
          Telnet_Interface telnet = new Telnet_Interface();
          Telnet_Interface telnet1 = new Telnet_Interface();
          Telnet_Interface telnet2 = new Telnet_Interface();
            PreparedStatement prest = conn.prepareStatement(sql);
            ResultSet res=prest.executeQuery();
            while(res.next()){
telnet1.Config(res.getString(1), "user", "passwd", res.getString(1));
telnet2.Config(res.getString(2), "user", "passwd", res.getString(2));
            }
           ArrayList myData=new ArrayList();
           ArrayList myData1=telnet1.getMyData();
           ArrayList myData2=telnet2.getMyData();
      boolean bool=false;            
  for(int i=0;i<myData1.size();i++)    
  {    
     for(int j=0;j<myData2.size();j++)    
    {
        if (myData2.get(j).equals(myData1.get(i)))
             {                
                bool=true; 
                //System.out.print("sdfsd");
             }

    if(!bool)
        {
            myData.add(myData2.get(j));
            //System.out.print("sdsd");
        }      
  }
  }
  for(int x=0;x<myData.size();x++)
  {
      System.out.print(myData.get(x));
  }

     } catch (SQLException ex) {
            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex); 
     }       
}

}

どうしたの ??ありがとうございました

4

2 に答える 2

1

このようにArrayList.retainAllメソッドを使用するだけです

list1.retainAll(list2)

このメソッドの後、list1 には list2 で使用可能なデータのみが含まれます。

于 2013-06-14T11:24:52.063 に答える
0

(回答ではありません)全部分けてください。ロギングを使用して例外を処理します。

  1. 辞書攻撃ではない場合は、まず SQL でパスワードを取得してユーザーを取得します。

    • 結果セット、ステートメント、および接続を閉じます。
    • 結果を確認します。
  2. 次に、telnet データを取得します。

    • 結果を確認します。
  3. 次に、比較を行います。

    • @StinePikeの削除された回答をご覧いただければ幸いです。彼は基本的にlist1.retainAll(list2)、list2 で発生する list1 のすべての要素を削除することを提案しています。

次のことをしたいと思います。Outcommented は非ループの代替手段です。

// Add all myData2 and myData1 elements but not twice to myData.

// (1) Add myData2

myData.addAll(myData2);

// (2) Add myData1 when not in myData2

//myData1.removeAll(myData1);
//myData.addAll(myData1);
for (int i = 0; i < myData1.size(); i++)    
{    
    boolean found = false;
    for (int j = 0; j < myData2.size(); j++)    
    {
        if (myData2.get(j).equals(myData1.get(i)))
        {   
            found = true;
            break;             
        }
    }
    if (!found)
    {      
        myData.add(myData1.get(i));
    }
}
于 2013-06-14T11:36:54.180 に答える