2012-02-24 26 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

タブキーを使用...また、ほとんどのプログラミングテキストエディタは、最後の行が開始された場所に新しい行を自動的にインデントします。 –

+0

最も簡単な方法は、インデント(タブなし)と各行に余分な4スペースのインデントを使用してコードをフォーマットするエディタを使用することです。次に、エディタからSO入力ボックスにカット・ペーストします。 –

答えて

1

数字以外の文字については、文字コードを数値に変換しています。したがって、97と110は 'a'、 'n'、 'd'の文字コードで、33と35は!#です。

は、あなたはおそらくあなたのデフォルトのケースのためにしたいことだけです:新しいStringBufferの書き込みルーチンが呼び出されるたびに作成することは非常に無駄と非効率的である

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

注こと。 1つの文字列/ charを追加するだけなので、StringBufferをコピーするのではなく、その文字列/ charを直接印刷することもできます。

+0

Hmmm、私はそれを試みましたが、それはまだ同じ出力を示しています。私は値を渡すと自動的にasciiに変換されていると思います。asciiを文字に変換するものはありますか? –

+0

よかった!それは完全に機能します。本当にありがとう! –

+0

ああ、大丈夫、それも知って良いです、ヒントのおかげで。 –

0

sb.append(Integer.toString(c))に数字ではないアスキーコードを出力しています。

関連する問題