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

Java 如何创建排除值null的二维数组,java,arrays,Java,Arrays,我正在研究数组问题。 我有一个数组 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

我正在研究数组问题。 我有一个数组
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]));

                }         
        }    
}

如何消除值为“null”的行,或者以其他方式解决此问题

您得到空值,因为在这一行中您检查它们,但什么也不做

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


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

,您将获得空值,因为在这一行中,您将检查它们,而不执行任何操作

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


如果您想消除空值,只需这样做,而不是打断

您将事情复杂化了:

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
  }
}

for(int i=0;i你把事情复杂化了:

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
  }
}
for(inti=0;i试试这个

    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]
试试这个

    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]

您可以尝试此解决方案。您只需执行以下操作:

  • 迭代x的每个条目
  • 创建一个数组(y[i]),其长度等于元素的长度x[i]。这样您就可以将元素x[i]重复N次。其中N是x[i]的长度
  • 对于数组(y[i])的每个条目(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]));
            }
        }
    
    publicstaticvoidmain(字符串[]args)
    {
    字符串[]x={“否”、“i”、“in”、“eye”};
    字符串[][]y=新字符串[x.length][];
    
    对于(int i=0;i您可以尝试此解决方案。您只需执行以下操作:

  • 迭代x的每个条目
  • 创建一个数组(y[i]),其长度等于元素的长度x[i]。这样您就可以将元素x[i]重复N次。其中N是x[i]的长度
  • 对于数组(y[i])的每个条目(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]));
            }
        }
    
    publicstaticvoidmain(字符串[]args)
    {
    字符串[]x={“否”、“i”、“in”、“eye”};
    字符串[][]y=新字符串[x.length][];
    

    对于(int i=0;i为什么要使用
    x[i].length()
    作为数组长度,但循环
    i
    次?提示:您希望我们花时间来帮助您。因此,请您花1分钟来正确格式化/缩进您的源代码。仅此一点,您的代码很难阅读这一事实就花费了我们比应该花费的更多的时间。而且您知道:如果您愿意以更易于阅读的方式写下您的代码当然,你也可以更快地找到代码中的bug!@PavneetSingh:Yep,那么为什么OP会根据索引填充副本呢?基本上,第二个循环条件是错误的……循环应该是
    for(int j=0;j
    。无需检查
    x[i]
    为空,就好像早期的代码无论如何都会引发异常一样…@ElBundy:与其在将来关注它,为什么不现在关注它?编辑你的问题以显示格式化的代码。@PavneetSingh:我没有时间写完整的答案,而且问题的格式是当前的形式ting,这并不理想……但如果一条简短的评论就足以帮助OP,那就不值得回答了。你为什么要使用
    x[i].length()
    作为数组长度,但循环
    i
    次?提示:您希望我们花时间来帮助您。因此,请您花1分钟来正确格式化/缩进您的源代码。仅此一点,您的代码很难阅读这一事实就花费了我们比应该花费的更多的时间。而且您知道:如果您愿意以更易于阅读的方式写下您的代码当然,你也可以更快地找到代码中的bug!@PavneetSingh:Yep,那么为什么OP会根据索引填充副本呢?基本上,第二个循环条件是错误的……循环应该是
    for(int j=0;j
    。无需检查
    x[i]
    为空,就好像早期的代码无论如何都会引发异常一样…@ElBundy:与其在将来关注它,为什么不现在关注它?编辑你的问题以显示格式化的代码。@PavneetSingh:我没有时间写完整的答案,而且问题的格式是当前的形式ting,这并不理想……但是如果仅仅一条简短的评论就足以帮助OP,那就不值得回答了。太好了。对一个无法使用简单for循环迭代/设置数组的新手抛出一个复杂的4行流操作……太好了。对一个我喜欢的新手抛出一个复杂的4行流操作s无法使用simple for循环迭代/设置数组…请尝试解释为什么这是一个更好的解决方案,这是一个新手尝试学习,给他一些代码对他没有帮助请尝试解释为什么这是一个更好的解决方案,这是一个新手尝试学习,给他一些代码对他没有帮助如果我可以建议添加一些关于每个循环都有(或添加一个指向您的解释的数字)。@AxelH这样做了。尽管(imho),代码段下面的文本应该很好地解释代码在做什么。如果我可以建议添加一些关于每个循环的注释(或添加一个指向您的解释的数字)。@AxelH这样做了。尽管(imho),代码段下面的文本应该很好地解释代码在做什么。实际上,这不是他的问题