我正在研究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;或者其他可能解决这个问题的方法?
答案 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)
您可以尝试此解决方案。你只需要做以下事情:
请参阅评论中的编号以便更好地理解。
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;}
如果要消除空值,只需执行此操作而不是破坏