0

2 つの別個のクラスのインスタンスを含む 2 つの配列リストを互いに比較したいと考えています。

例: 最初のリスト: HKY SGP 15:00 3 20:20 700

2番目のリスト: 1 HKY SGP 8:00

したがって、最初のリストに HKY と SGP という単語が含まれている場合は、値 700 を返す必要があります。これらは両方とも、コストと呼ばれる別のクラスで比較されます。main メソッドを使用して、このコスト クラスに配列リストを渡します。次に、このコスト クラスはアレイリストの比較に進みます。

私が試したこと:私は問題をグーグルで検索し、提供されたいくつかの解決策を使用してみました. contains または equal を使用してみました。それは私に間違った値を与えます。

次に、両方のクラスの get メソッドを使用して比較してみました。それも望ましい出力を与えません。

これらのオブジェクトを両方とも間違って比較していると思います。比較方法がわかりません。arraylist でこれらのオブジェクトを比較する方法について、誰かが光を当てることができますか?

ありがとうございました!

メインのコード:

    ArrayList<planes> air = new ArrayList<>();
    ArrayList<questions> q = new ArrayList(); // same as below for questions

    Scanner sc = new Scanner(System.in);
    num = sc.nextInt();


    for (int i=0; i<num; i++){  
       planes p = new planes();

       p.setfrom(sc.next());
       p.setTo(sc.next());
       p.setdT(sc.next());
       p.setaD(sc.next());
       p.setaT(sc.next());
       p.setCt(sc.next());
       air.add(p);


    }
4

2 に答える 2

3

必要なことを行うためのカスタムComparator<T>を作成します。

おそらく、両方の正規表現がそれを行うでしょう:

// two Strings both contain "foo"
return x.matches("[foo]") && y.matches("[foo]");

正規表現でできない場合は、独自の Knuth-Morris-Pratt マッチャーを実装します。

http://www.ics.uci.edu/~eppstein/161/960227.html

于 2013-09-13T11:33:21.450 に答える
0

を実装できますComparator<T>compare(T arg0, T arg1)したがって、インターフェースを実装するには、そのメソッドをオーバーライドする必要があります。でT、比較する任意のタイプを配置できます。ArrayList<>()、クラス、文字列などと同様に、文字列に HKY SGP が含まれているかどうかを確認します。これらが常に隣接している場合は、次のように直接実行できます。

public int compare(String list1, String list2) {

    return list1.contains("HKY SGP") && list2.contains("HKY SGP") ? 700 : 0;
}

両方の文字列に「HKY SGP」が含まれている場合、これは 700 を返し、それ以外の場合は 0 を返します。

「SGP」が常に「HKY」の後にあるとは限らない場合は、それぞれを確認してください。何かのようなもの:

return list1.contains("HKY") && list1.contains("SGP") && list2.contains("HKY") && list2.contains("SGP") ? 700 : 0;
于 2013-09-13T11:36:53.247 に答える