2015-02-05 245 views
0

我试图编写一个接受和返回一个字符数组的方法。我想用'h'i'来代替每个空间''。我不能使用字符串类或任何其他帮助器类。我在“总+ = ch;”时卡住了因为它们是两种不同的类型。
我想要什么将char附加到char数组java

char[] characterStr = {'w','h','a','t','s',' ','u','p'} 
System.out.println(characterStr); 
System.out.println(Space(characterStr)); 

whats up 
whatshiup 

我迄今为止代码:

public static char[] Space(char[] input){ 
    char[] total; 

    for(char ch: input){ 
     if(ch==' '){ 
      ch = 'h'+'i'; 
      total += ch; 
     } 
     else{ 
      total += ch; 
     } 

    return total; 
+2

我认为这是最容易的,如果你从数组中构造一个字符串,用“hi”替换所有的空格,然后调用toCharArray来获得结果字符数组。 – 2015-02-05 18:43:37

+0

我不能使用String类。 – 2015-02-05 18:44:21

+1

如果你不能使用'String',那你为什么要声明你的方法是返回一个? – azurefrog 2015-02-05 18:44:58

回答

2

你的根本问题似乎是,你似乎并不理解在Java中如何arrays工作。

在Java中,阵列具有固定长度,并且每个位置只能容纳一个的声明的数据类型的。举例来说,如果你有这个char[][w, h, a, t, s, , u, p],它的长度将永久固定在8

您可以替换给定位置中的字符,但如果您多次执行该操作,则只会覆盖该值。

char[] characterStr = {'w','h','a','t','s',' ','u','p'}; 
    characterStr[5] = 'h'; // [w, h, a, t, s, h, u, p] 
    characterStr[5] = 'i'; // [w, h, a, t, s, i, u, p] 

此外,您不能使用+=尝试追加值:

char[] characterStr = {'w','h','a','t','s',' ','u','p'}; 
    characterStr += 'h'; // compile error! operator += is undefined for these arguments 

你必须赋值给一个给定的位置,使用arrayname[index] = value;语法。

你需要做的事情(如注释中所述)首先通过计算原始数组中空格的数量来计算您尝试创建的数组的大小。您是通过已经循环和寻找空间,所以你只需要根据该尺寸来取代在您尝试修改与计数数组的代码,并创建输出数组:

int size = input.length; 
    for (char ch: input) { 
     if (ch == ' ') { 
      size += 1; 
     } 
    } 
    char[] total = new char[size]; 

另外请注意,我并不只是将total声明为char[]类型的变量,但我使用了新的关键字来实际创建它。与其他对象一样,Java中的数组需要被明确地创建,否则当您尝试使用它时,最终会产生一个NullPointerException

创建新阵列后,可以循环访问原始输入阵列,并将非空格字符复制到(或当看到空格时复制'h''i')。

您不希望为此使用for-each循环,因为您需要手动跟踪数组索引。 (提示:一旦你看到一个空格,输入数组的索引和输出数组中的索引将不会相同)。

+0

不应该将大小作为'input.length'而不是0来开始吗? – chancea 2015-02-05 19:44:46

+0

@chancea哎呀,是的,你是对的。原本我在计算空间,并忘记改变,当我重新写它。现在修复。 – azurefrog 2015-02-05 20:31:29