2012-02-24 106 views
1

這是一項家庭作業,我在輸出時遇到了問題。除了Integer.toString()沒有給我我想要的結果外,一切都按預期工作。當我希望將它們轉換爲實際的單詞時,它仍然輸出一串數字。下面的代碼輸出:將單詞的整數表示形式轉換爲字符串

import java.io.*; 

    public class NumStream extends OutputStream 
    { 
     public void write(int c) throws IOException 
     { 
      StringBuffer sb = new StringBuffer(); 
      switch(c) 
      { 
       case ' ': sb.append(" "); 
        break; 
       case '1': sb.append("One"); 
        break; 
       case '2': sb.append("Two"); 
        break; 
       case '3': sb.append("Three"); 
        break; 
       case '4': sb.append("Four"); 
        break;     
       case '5': sb.append("Five"); 
        break; 
       case '6': sb.append("Six"); 
        break; 
       case '7': sb.append("Seven"); 
        break; 
       case '8': sb.append("Eight"); 
        break;  
       case '9': sb.append("Nine"); 
        break; 
       case '0': sb.append("Zero"); 
        break; 
       default: sb.append(Integer.toString(c)); 
        break; 
      } 
      System.out.print(sb); 
     } 
     public static void main(String[] args) 
     { 
      NumStream ns = new NumStream(); 
      PrintWriter pw = new PrintWriter(new OutputStreamWriter(ns)); 
      pw.println("123456789 and ! and # "); 
      pw.flush(); 
     } 
    } 

輸出爲:OneTwoThreeFourFiveSixSevenEightNine 97110100 33 97110100 35 1310

可有人請告訴我如何格式化代碼在這個論壇更容易?我不得不手動8個空格縮進每一行,並且有一個更簡單的方法!

+0

使用tab鍵......此外,大多數編程文本編輯器會自動縮進新行到最後一行開始的位置。 – 2012-02-24 00:55:55

+0

最簡單的方法是使用編輯器將代碼格式化爲用於縮進(無選項卡)的空格,並在每行上添加4個空格的縮進。然後只需從編輯器粘貼到SO輸入框即可。 – 2012-02-24 00:59:55

回答

1

對於非數字的字符,您需要輸入字符代碼並將其轉換爲數字。所以97 110和100是'a','n'和'd'的字符代碼,而33和35是!#

你可能要爲你的默認情況下就是休息:

default: sb.append((char)c); break; 

注意,創建每次寫入程序被稱爲新的StringBuffer是極其低效浪費。由於您只添加了一個字符串/字符,所以您可以直接打印該字符串/字符而不是通過StringBuffer進行復制。

+0

嗯,我試過了,但它仍然顯示相同的輸出。我猜測它會自動轉換爲ascii,當我傳遞的值。是否有東西將ascii轉換回字符? – 2012-02-24 00:59:18

+0

噢,真好!這是完美的。非常感謝! – 2012-02-24 01:03:23

+0

啊好吧,這也是很好的知道,謝謝你的提示。 – 2012-02-24 01:05:23

0

您正在輸出sb.append(Integer.toString(c))中不是數字的ascii碼。