0

2D char 配列から文字を出力しようとしていますが、各文字ではなく文字列を取得し続けています。たとえば、コマンドラインの引数は

「-abcdefghij を暗号化」

    String command = args[0]; 
    String Text = args[1]; //letters to be 

    char letters [] = Text.toCharArray(); 
    int m = Text.length(); //number of letters to be decrypted/encrypted


    String command = args[0]; 
    String Text = args[1]; //leters to be 

    char letters [] = Text.toCharArray(); 
    int m = Text.length(); //number of letters to be decrypted/encrypted


    if (command.equals("-encrypt")) {

        //if statement was here before for perfect square numbers

        else if     ( m / (int) Math.sqrt(m) != Math.sqrt(m) ) { //non perfect square digits

        int RootM = (int) Math.pow((Math.sqrt(m))+1,2); //overall size of 2d array (depth*width)
        int RootN1 = (int) Math.sqrt(RootM); //length of rows & columns

        char [][] box = new char [RootN1][RootN1]; //define dimensions of 2d array

            for (int i=0; i<RootN1; i++) {
                for (int j=0; j<RootN1; j++) {
                    box[i][j]=letters[2*i+j];
                }
            }

            for (int i=0; i<RootN1; i++) {
                for (int j=0; j<RootN1; j++) {  

            System.out.print(box[j][i]); 
4

2 に答える 2

0
 for (int i=0; i<RootM; i++) {
    for (int j=0; j<RootM; j++) {
      box [i] = letters;
      box [j] = letters;
      System.out.print(box[i]); //displays encrypted text
    }
 }

が問題です。box[i] = letters内側のループ内に配置するため、実行RootM*RootM回数になります。これはprintステートメントでも同じです。割り当てをクリアして、box2D char 配列のロジックを出力する必要がある場合があります。

2*2コメントへの返信によると、 abcdを最初の行に含む行列に入れab、2番目の行に含む必要がありますcd。インデックス マッピングは次のように見つけることができます。

index in 1D array:
    0    1    2  3

index in 2D array:

  (0,0) (0,1) (1,0) (1,1)

したがって、マッピングは次のとおりです。

box[i][j] = letters[2*i+j];

ここで、4*4 行列があるとします。

index in 1D array:
0  1  2  3  4 5  6  7  8  9  10  11  12  13  14  15

index in 2D array:
(0,0),(0,1),(0,2),(0,3),(1,0),(1,2) ....

マッピングが必要になります

box[i][j] = letters[4*i+j];

つまり、行数がNの場合、必要です

box[i][j] = letters[N*i + j];

ループは次のようになります。

for (int i=0; i<RootM; i++) {
  for (int j=0; j<RootM; j++) {
    box [i][j] = letters[2*i+j];
  }
}

//you can now print column by column
for (int i=0; i<RootM; i++) {
  for (int j=0; j<RootM; j++) {
     System.out.print(box [j][i]);
  }
}
于 2013-04-13T13:03:02.370 に答える