2016-11-02 5 views
0

ユーザーが2つの文字列配列(xs、ys)を入力するパズルプログラムを開発しています。各配列からの各要素は、互いに等価です。私は両方の配列を検索し、それを解決するために同様の値を見つけなければなりません。java-check文字列複数の特定の整数/文字のArrayList

私が行ったことは、同等の要素を一緒に含むArrayListを作成することです。しかし、特定の値を見つけるためにArrayListをフィルタリングする必要があります。例えば

、これは、Yは、= 1 1 4 = X = 3であることを意味ユーザ入力 XS = [X、Y 1、X] YS = [3、4、1、3] 場合、x = 3

私が今しなければならないことは、似たような値を含むArrayList(マッチ)をフィルタリングして、1つのタイプの整数しか含まないことを確認することです。 たとえば、ユーザーが次のように入力した場合: xs = [x、y、1、x] ys = [3、4、1、5] xは3と5になることはできません。

私はIF文を使用してコードを書き始めましたが、ユーザーが入力できる値を考慮して、これは効率的ではないことに気付きました。私はまた、私の解決ブール値もオーバーライドできることに気づいた。私は以下の私のコードをコピーした:

ArrayList<String> match = new ArrayList<String>(); 
for (i = 0; i < size; i++) { 
    match.add(xs[i]); //filtering equivalent elements 
    match.add(ys[i]); 

    for (j = 0; j < size; j++) { 
     if ((xs[i] == xs[j]) || ys[i] == ys[j] || xs[i] == ys[j] || ys[i] == xs[j]) { 
      match.add(xs[j]); // adding any other values which are same 
      match.add(ys[j]); 
     } 

     for (t = 0; t < match.size(); t++) { 
      boolean hasDigit = (match.get(t)).matches(".*\\d.*"); 
      int digit = (-1); // initialising digit 

      if (hasDigit && digit == (-1)) { 
       digit = match.get(t); // all integers must be equal to this value to be considered valid 
       solve = true; 
      } else if (hasDigit && digit == match.get(t) && digit != (-1)) { 
       solve = true; 
      } else if (hasDigit && digit != match.get(t) && digit != (-1)) { 
       solve = false; 
      } 
     } 

なって、私はxの3つの整数値持っているので、私は、これは間違っていると思う理由がある(2、5、2)。これは、digit = 2であるためsolve = trueとなり、5!= 2のときはfalseとなりますが、2!= 2の場合はtrueに変わります。しかし、それはまだ無効です。

ありがとうございます。

+0

なぜ、 '-1'の前後にカッコを入れていますか? –

+0

私はそれに慣れています。 – assassinweed2

+0

同様の投稿で私の答えを調べるhttp://stackoverflow.com/a/40099027/3344829 – Saravana

答えて

2

これとは別の方法でアプローチして、同値を保存するにはMap<String,String>を使用します。 (xs[i]ys[i])のペアを処理するには、すでにxs[i]にバインドされている既存の値をマップ内で調べるロジックがあります。何も見つからない場合は、をys[i]にバインディングするエントリを追加します。見つかった場合は、マップのバインドされた値がys[i]に等しいことをテストします。それが失敗した場合は、「有効な入力」フラグをfalseに設定します。 (配列を処理する前に、フラグをtrueに初期化してください。処理中にフラグを変更するのは、falseに設定することです)。

+0

まだ、ここでは[x、y、x]が指定されていても有効なエントリではないという前提がありますそのユーザは、第1の配列に同じ変数を入力することができる。 ここに何か不足していますか? –

+0

@AhmadAlsanie - 'xs'が' [x、y、x] 'ならば' ys'が 'xs'の' x'の各位置で同じ値を持っていれば有効になります。これがOPの説明であり、それが私のアプローチがすることです。 –

+0

xs = [x、y、1、x] ys = [u、2、1、3]のようなものはx = u = 3なのでまだ有効ですが、 y = 2および1 = 1である。 – assassinweed2

0

"filter"という単語を2回使用しました。 3番目のループとif文の代わりにリストをストリームに入れ、lambda式でfilter()メソッドを使用する必要があることは論理的です。このようにすると、明示的な反復とフラグを取り除くことができます。

match.stream() 
    .filter(e -> ...) 
    ...; 
関連する問題