这是一项家庭作业,我的输出有问题。一切都按预期工作,除了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 :(得分:1)
对于非数字的字符,您将获取字符代码并将其转换为数字。所以97 110和100是'a','n'和'd'的字符代码,而33和35是!
和#
。
您可能想要的默认情况只是:
default: sb.append((char)c); break;
请注意,每次调用write例程时创建一个新的StringBuffer都非常浪费且效率低下。因为你只需要向它添加一个字符串/ char,所以你也可以直接打印字符串/ char而不是复制StringBuffer。
答案 1 :(得分:0)
您正在输出sb.append(Integer.toString(c))
中不是数字的字符的ascii代码。