我的代码存在问题:
public class stringToChar {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
char[] sCharArr;
String[] odd = new String[n];
String[] even = new String[n];
for(int i = 0; i < n; i++) {
sCharArr = in.next().toCharArray();
for(int j = 0; j < sCharArr.length; j++) {
if(j % 2 == 0)
even[i] += sCharArr[j];
else
odd[i] += sCharArr[j];
}
}
for(int i = 0; i < n; i++) {
System.out.println(even[i] + " " + odd[i]);
}
}
}
我的问题是输出结果中有Null
。以下是一个示例场景:
2
John
Cena
答案应该是:
Jh on
Cn ea
但我的代码答案是:
NullJh Nullon
NullCn Nullea
答案 0 :(得分:1)
您的问题是新数组是使用所有 null 字符串初始化的。然后你的代码不为所有数组元素赋值,但仅限于其中一些元素!
最后你打印你的数组,并且惊讶的是, null并且尚未更改的那些值仍为空(当你打印一个空字符串时......它会打印&#34 ; null&#34; [是的, n ull,而不是 N ull;你的输出示例中有一点错误]
你看,你从0迭代到两个数组的长度。如果数字是偶数,你在even [i]中加上一个值;如果值是奇数,则转到odd [i]。让我们采取均衡 - 在这种情况下,奇怪的[i]只是保持为空!
解决这个问题的一种方法:
List<String> even = new ArrayList<>();
List<String> odd = new ArrayList<>();
现在,而不是设置偶数/奇数的某个索引;你只是这样做:
even.add(some new value);
并添加这些单个字符:
even.add(new String(sCharArr));
这样做,偶数和奇数(最后)将包含添加到每个列表的值;但没有&#34;残余&#34;空值。为了记录:你如何分割字符串,然后将它们拉回到字符串数组中的方式并不是解决问题的最简单/最直接的方法。
但我离开&#34;进一步&#34;简化&#34;作为锻炼给用户。