字符串到字符数组

时间:2016-09-04 10:31:14

标签: arrays string char java-7

我的代码存在问题:

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

1 个答案:

答案 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;作为锻炼给用户。