我写这个程序的本意是先输入一个小写字母,
然后把它转换为大写,在输入一个大写字母,在转换为小写,但是我只能运行前一个功能,可是我如果同时输入一个小写和大写字母,则可以运行?
这是为什么呢?
package p1;
public class ToUpperCaseTest
{
  public String toUpperCase(String str)
  {
    return str.toUpperCase();
  }
}package p1;
public class ToLowerCaseTest
{
  public String toLowerCase(String str)
  {
    return str.toLowerCase();
  }
}/**
   设计包p1并在其中的创建两个列,他们的功能
   是对字母进行大小写转换,创建一个应用程序,
   将从键盘输入的字母进行大小写转换
*/import java.io.*;
import p1.*;public class CaseTest
{
  public static void main(String[] args) throws IOException
  {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("请输入一个小写字母:");
    char a1 = (char)br.read();
    if (Character.isLetter(a1))
    {
  String a = String.valueOf(a1);
  ToUpperCaseTest upperCase = new ToUpperCaseTest();
      System.out.println(upperCase.toUpperCase(a));
    }    System.out.println("请输入一个大写字母:");
    char b1 = (char)br.read();
    if (Character.isLetter(b1))
    {
  String b = String.valueOf(b1);
  ToLowerCaseTest lowerCase = new ToLowerCaseTest();
      System.out.println(lowerCase.toLowerCase(b));
    }
  }
}

解决方案 »

  1.   

    逻辑就错了嘛。输入sting 变成char读出.你一个字母read一下输入流就空了,char b1 = (char)br.read(); 没有东西读如果2个字母char b1 = (char)br.read(); 就会继续读到东西
      

  2.   

    程序不会按你想的逻辑进行;
    System.in,你只要求它系统输入一次。如果你只输入一个字母,那么第一次调用read()方法,就已经读完了。首先,你的明白流read的机制,它是向前的,也就是说,读后无法后退,读完,数据清空。
    你输入两个字母能正常运行,是因为,第二次读取的是你第二个字母。这不是你想要的,不是么?只需要多调用几次System.in,就可以读取了。
    另外你读取的方式改一下吧!
    用readLine(),读一行