2017-02-10 2 views
-3

の要素移動:スワッピングまたは私はこのフォーマット(マトリクス)の2Dアレイ持っている2次元配列

String[][] start; 
start = new String[4][4]; 

入力

d d + + 
a d d + 
a b b c 
+ b _ d 

出力

d d + + 
a d d + 
a b b c 
+ _ b d 

目的は、アンダースコア(_)をスワップ/移動/シフトすることです。私は "+"文字でスワップできません。私は手紙と交換することしかできません。

私は他の文字を "_"で置き換えようとしていますが、置き換えないようにしています。私はこの操作をループ内で発生させようとしています

私はこれについてどうやって行くのか分かりません。私はどんな提案にも感謝しています。

最後の行で "_"と "b"を入れ替えて配列の状態を変更しました。これは初期状態と比較できる新しい配列になりました。新しい状態を別の配列に格納して、初期状態と比較する必要があります。

+0

文字だけを使用している場合は、 'char [] [] start'を使うことをお勧めします。 –

+0

この場合、char以上の文字列を使用する利点は何ですか? @RenéScheibe –

+0

'char'はあなたの入力をより良く記述するので。詳細はhttp://stackoverflow.com/questions/10430043/difference-between-char-and-string-in-javaをご覧ください。 –

答えて

1

次の2つのループを使用することができます。

public static void main(String[] args) { 
    String[][] start = {{"d", "d", "+", "+"}, {"a", "d", "d", "+"}, {"a", "b", "b", "c"}, {"", "a", "_", "d"}}; 
    for (int i = 0; i < start.length; i++) { 
     for (int j = 0; j < start[i].length; j++) { 
      System.out.print(start[i][j] + " "); 
      //here you should to check if your index is > 0 
      if (j > 0) { 
       //here you make your swapping if your attribute = to _ 
       //and the previews value is not equal to + like you said in your question 
       if (start[i][j].equals("_") && !start[i][j-1].equals("+")) { 
        String x = start[i][j - 1]; 
        start[i][j - 1] = "_"; 
        start[i][j] = x; 
       } 
      } 

     } 
     System.out.println(); 
    } 

    //print your result 
    for (int i = 0; i < start.length; i++) { 
     for (int j = 0; j < start[i].length; j++) { 
      System.out.print(start[i][j] + " "); 
     } 
     System.out.println(); 
    } 
} 

結果は次のとおりです。

d d + + 
a d d + 
a b b c 
+ _ b d 
+0

ありがとう@YCF_L私はこれが非常に役に立ちました。 –

+0

あなたは歓迎です@the_fro :) –

0

スワッピングと移動によって正確な意味がわかりません。しかし、あなたの配列は基本的にメモリのグリッドです。セルにのみ新しい値を割り当てることができます。値を移動することはできません。割り当て以外のことをしたい場合は、この操作を構築する必要があります。移動の場合と同様に、新しいセルに値を代入し、古いセルにnullを代入することもできます。ほとんどの場合、スワッピングには一時変数が必要です。

+0

は、アンダースコアをマトリックスの他の文字と置き換えることができますか?私は一時変数が必要であることを理解しています。 –

0

文字列を含む他のアルファベットと"_"を交換した後に、あなたは何を期待しているのか不明なので、私はあなたのために働くかもしれないスケルトンプログラムを与えます。

String[][] start = new String[4][4]; 

for (int row = 0; row < start.length; row++) { 
    for (int column = 0; column < start[row].length; column++) { 
     if (start[row][column].equals("_")) { 
      // you can swap character "_" with other alphabets 
     } 
    } 
} 

文字列にアルファベットのみが含まれているかどうかを確認するには、次のようにします。

if (start[row][column].matches("[a-zA-Z]+")) { 
    // string contains only alphabets, now you do what you want to do 
} 

特に、行列の各行と列を調べて、文字列にアルファベットまたはアンダースコアのみが含まれているかどうかを確認する必要があります。次に、スワップを実行できますが、マトリックスの要素にアクセスしている間はインデックスに注意してください。あなたは2次元配列を持っていて、これを使用することができ、あなたの価値_に等しいかどうかをチェックする場合に使用するので

関連する問題