2014-01-08 108 views
0

我有這個功能由字符打印的字符數組字符函數,參數stream就在那裏爲我們習慣於從Java到CWhile循環不顯示字符串

public static int writeline (String message, PrintStream stream) {   
    // YOUR CODE GOES HERE 
    char[] array = new char[message.length()]; 

    for(int i = 0; i < message.length(); i++){ 
     array[i] = new Character(message.charAt(i)); 
    } 

    int index = 0; 
    while(array[index] < message.length()){ 
     fputc(array[index],stream); 
     index++; 
    } 
    return 0; 
} 

public static void main(String[] args) { 

    System.err.print("Hola Mundo\n"); 
    writeline ("Hello World", System.out); 
} 

的過渡while循環只有在我給出如array[index] != null這樣的條件時才起作用,但是它會打印出超出界限異常錯誤的字符串。否則,這沒有打印出來。主要方法只是調用這個方法傳遞一個字符串和流參數。

編輯增加了清晰度

+0

你可能會發現這很有用,['字符串#toCharArray()'](HTTP:// docs.oracle.com/javase/6/docs/api/java/lang/String.html#toCharArray()),而不是創建自己的實現......或者這意味着成爲一個C問題... –

+0

不是允許使用除長度和charAt以外的任何字符串方法,否則我會用它代替 –

+0

好吧,不用擔心,但仍然是這意味着是Java還是C? 'fputc'並不是java的 –

回答

2

您目前循環,而在你的字符串的每個字符的數值小於你的字符串的長度主要方法。這是一個ASCII chart。這給出了字符的數值。

您的字符串可能不超過'a'或'A'的數值嗎?所以循環的條件是錯誤的,沒有打印。

當你循環的時候array[index]!=null你得到一個ArrayIndexOutOfBoundsException,因爲循環是真的,直到數組的末尾(因爲你的數組中沒有任何元素爲空)。最後你引用一個不存在的索引。

你想要做的是循環,而index的值小於你的字符數組的長度。

while(index < array.length){ 
    //code code code ;) 
} 

如果你被允許在這裏使用一個for循環,我會用它來代替while作爲其稍微乾淨。

for(int index=0;index<array.length;index++){ 
    //same code. 
} 
+0

o jeez ....多麼愚蠢的錯誤....我沒有意識到我的錯誤......謝謝!漫長的一天:) –

+0

哈哈,我們都有休息日!如果沒有別的,當你有機會時,請接受一個答案來結束你的問題。謝謝@ApprenticeProgrammer –

1

以下修補程序將循環播放,直到指數等於字符串的長度:

int index = 0; 
while(index < message.length()){ 
    fputc(array[index],stream); 
    index++; 
}