2016-10-10 1 views
1

私は配列の質問に取り組んでいます。 私は配列を持っています String [] x= {"no", "i", "in" , "eye"}; 各値の文字を数え、要素N回繰り返すような第2の次元を作成する必要があります。 Nは要素の長さです。私はこの問題解決するために、次のコードを作成している作成方法2 dimention値nullを除く配列

[no] ->[no][no] 
[i] -> [i] 
[in] ->[in][in] 
[eye] ->[eye][eye][eye]. 

:たとえば

public class targil_2_4 { 
    public static void main(String[] args) { 
    String [] x= {"no", "i", "in" , "eye"}; 
    String [][] y = new String [x.length][];    
    for(int i=0; i<=x.length-1; i++){   
     y[i]= new String [x[i].length()]; 

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

       for(int b=0; b<=y[i].length-1; b++){ 

        if(x[i] == null){break;} 
        else{ 
      y[i][j]= x[i]; 
        } 

        } 

       System.out.println(x[i]+ " "+Arrays.toString(y[i])); 

       }   
     }  
} 

}

は、しかし、私のような値を取得[いいえ] - > [いいえ] [いいえ] [null]:

[i] 
[in, null] 
[in, in] 
[eye, null, null] 
[eye, eye, null] 
[eye, eye, eye] 

この問題を解決するために値 'null'または他の方法を持つ行を削除するにはどうすればよいですかレム?

+1

なぜ、x [i] .length()を配列の長さとして使用していますが、 'i'回繰り返すのですか? –

+0

@JonSkeet OPは、与えられた文字列の長さに等しいコピーを作成したいと考えています。 –

+4

ヒント:私たちがあなたを助けるために私たちの時間を費やすことを望みます。ですから、あなたのソースコードを適切にフォーマット/インデントするのにかかる時間は1分ほどかかります。あなたのコードが読みにくいという事実だけでは、私たちはそれ以上の時間を費やすことはありません。そして、あなたは知っている:あなたのコードをより読みやすい方法で書き留めれば、コード内のバグをより迅速に見つけることができるかもしれない! – GhostCat

答えて

2

あなたはこのソリューションを試すことができます。 Xの各エントリを超える

  1. 反復:あなたは次のことを行う必要があります。
  2. 長さがx [i]の長さの配列(y [i])を作成します。したがって、要素x [i]をN回繰り返すことができます。ここで、Nはx [i]の長さです。アレイの各エントリについて
  3. Y [I] [J])は(Y [i]が)を、X [i]はに値を設定します。

理解のためにコメントの番号を参照してください。

public static void main(String[] args) 
    { 
     String[] x = {"no", "i", "in", "eye"}; 
     String[][] y = new String[x.length][]; 
     for (int i = 0; i <= x.length - 1; i++) //1 
     { 
      y[i] = new String[x[i].length()]; //2 

      for (int j = 0; j < y[i].length; ++j) 
      { 
       y[i][j] = x[i]; //3 
      } 
      System.out.println(Arrays.toString(y[i])); 
     } 
    } 
+1

これがより良い解決策である理由を説明してください。これは試してみる初心者です彼にいくつかのコードを与えることを学ぶために彼を助けることはありません – AxelH

+0

Tnx、それは非常に明確で簡単です。 –

0

あなたはあなたがそれらをチェックし、(X [i]を== nullの)があれば

何もしませんので、この行にNULLを取得{破る;}

あなたはヌルを排除したい場合は、ちょうどそれを行います代わりに

+0

実際、彼の問題ではありません。 – GhostCat

2

を壊すのあなたは上に複雑事を次のとおりです。

for(int i=0; i<=x.length-1; i++) { // to iterate over the content of x 
    y[i]= new String [x[i].length()]; 
    for(int j=0; j<x[i].length(); j++) { // iterate over the new array 
    y[i][j]= x[i];  // and for each position in that array: fetch corresponding value from input array x 
    } 
} 

はそれをやるべき。

あなたの入力配列には、のいずれかが含まれていません。 nullがあります。だからあなたはその配列を反復するだけです。その配列内の各エントリに対してEの長さを指定します。長さはEです。 Eの「長さ」のコピーを作成します。

そして記録のために、私たちはこのような問題を解決する必要はありません。デバッガでコードを簡単に実行して、何が起きているのかを把握することができます。実行時に何が起こっているのかを理解するためにprintステートメントを追加してください!

+0

もし私が各ループが何をしているのか(またはあなたの説明を指し示す数字を追加する)いくつかのコメントを追加することを提案するかもしれません。 – AxelH

+1

@AxelHそうだった。 (imho)でも、コードスニペットの下のテキストは、コードが何をしているかをうまく説明するはずです。 – GhostCat

1

これを試してください。

String [] x= {"no", "i", "in" , "eye"}; 
    String[][] y = Stream.of(x) 
     .map(s -> IntStream.range(0, s.length()) 
      .mapToObj(i -> s).toArray(String[]::new)) 
     .toArray(String[][]::new); 
    for (String[] a : y) 
     System.out.println(Arrays.toString(a)); 

結果:

[no, no] 
[i] 
[in, in] 
[eye, eye, eye] 
+4

単純な** forループを使用して配列を繰り返し/設定できない初心者で複雑な4行ストリーム操作を投げる** ... – GhostCat

関連する問題