如何创建排除值null的2维数组

时间:2016-10-10 12:53:43

标签: java arrays

我正在研究Array问题。 我有一个数组 String [] x= {"no", "i", "in" , "eye"}; 我需要创建第二个维度,它计算每个值中的字符并重复元素N次。 N是元素的长度。 例如:

[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]));

                }         
        }    
}

}

但我得到的值如[no] - &gt; [no] [no] [null]:

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

如何消除有价值的行&#39; null&#39;或者其他可能解决这个问题的方法?

4 个答案:

答案 0 :(得分: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
  }
}

应该这样做。

您看,您的输入数组不包含任何空值。所以你只是迭代那个数组;对于该数组中的每个条目 E ,您可以确定 E 的长度;然后你创建&#34;长度&#34; E 的副本。

记录:你不需要我们来解决这些问题。您可以在调试器中轻松运行代码以了解正在发生的事情;或添加print语句以了解它在运行时发生的情况!

答案 1 :(得分:2)

您可以尝试此解决方案。你只需要做以下事情:

  1. x 的每个条目进行迭代。
  2. 创建一个长度的数组( y [i] ),该数组等于 x [i] 元素的长度。这样你就可以重复 x [i] 元素N次。其中N是 x [i] 的长度。
  3. 对于数组的每个条目( y [i] [j] )( y [i] ),请将值设置为 x [i] 即可。
  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++) //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]));
            }
        }
    

答案 2 :(得分: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]

答案 3 :(得分:0)

你得到空值,因为在这一行你检查它们什么都不做

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

如果要消除空值,只需执行此操作而不是破坏