2012-02-24 16 views
1

HashExceptionというjava.lang.RuntimeExceptionのサブクラスを作成しようとしています。NumStreamクラスがハッシュ文字(#)を検出したときにNumStreamをスローするように修正する必要があります。これを実装する方法があまりわからない、私はいくつかのものがあり、それは例外をスローしますが、これを実装するためのよりクリーンな方法があるのか​​、それとも正しく行っているのか疑問です。例外を投げてサブクラスを通して実装する

import java.io.*; 
import java.lang.*; 

class HashException extends java.lang.RuntimeException 
{ 
    public void write(int c) 
    { 
     if(c == 35) throw new RuntimeException("This is a Hash Tag!"); 
    } 
} 

public class NumStream extends OutputStream 
{ 
    public void write(int c) throws IOException 
    { 
     StringBuffer sb = new StringBuffer(); 

     HashException h = new HashException(); 
     h.write(c); 

     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(); 
    } 
} 

これが私の出力です:

run: 
Exception in thread "main" java.lang.RuntimeException: This is a Hash Tag! 
    at HashException.write(NumStream.java:8) 
    at NumStream.write(NumStream.java:19) 
OneTwoThreeFourFiveSixSevenEightNine and ! and at  java.io.OutputStream.write(OutputStream.java:116) 
    at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221) 
    at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291) 
    at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295) 
    at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141) 
    at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229) 
    at java.io.PrintWriter.flush(PrintWriter.java:320) 
    at NumStream.main(NumStream.java:54) 
Java Result: 1 

答えて

2

チェックはおそらくあなたのnumstreamクラスにする必要があります。それがハッシュに遭遇したら、ハッシュ例外をスローします。このように:

switch(c) { 
      case '#': 
       throw new HashException(); 
      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; 
     } 

はまた、単にHashExceptionクラス内で例外messageを宣言することができます。HashExceptionはおそらくException、ないRuntimeExceptionを拡張する必要があることを

class HashException extends Exception 
{ 
    public HashException() { 
     super("A hash was encountered!"); 
    } 
} 

注意を。

+0

少し説明できますか?私はそれが印刷コマンドのようなものだと思っていますが、System.out.printではなく、なぜそれを使いましたか? –

+0

また、あなたが私に与えたコードを試しているときに例外が表示されないのですか?それを引き起こす原因は何ですか? –

+0

Ah nvm!私はそれを考え出した!すべての助け人のためにありがとう! –

関連する問題