package bufferedReader;import java.io.IOException;
import java.io.InputStream;public class JianPanShuRuEr { /**我的思路;我要定义一个数组,让这个数组起到缓冲区的作用
 * 还要对数组中的元素变成字符串的时候进行判断是否有over
 * 所以我要定义一个string变量用来转换
 * 所以我要一个一个的去读
 * 在我判断完而且要回车时候 我会让读取的元素进入到我的数组中去
 * 然后我还要进行变相的遍历
 * 所谓变相的遍历,就是用一个变量记住,然后再输入到一个字符串中
 * 最后还要把数组清空
 * 数组的长度如何定义呢  new char[in.avaliable()];
 * @param args
 * @throws IOException 
 */
public static void main(String[] args) throws IOException {
// TODO 自动生成的方法存根
fangFa();
}
public static void fangFa() throws IOException {
// TODO 自动生成的方法存根
//定义一个数组 什么类型?char

//定义数组的指针     记得要归零   还有呢     要定义一个计数器
int pos = 0;
int ch = 0;
//显示输入流
InputStream in = System.in;
char[] arr = new char[in.available()];
ch=in.read();
while ((ch = in.read())!=-1) 
{   

if(ch=='\r')
continue;
if(ch=='\n') 
{  
String temp = arr.toString();
if(temp.equals("over"))
break;
System.out.println(temp.toUpperCase());
pos = 0;
}

arr[pos++] = (char) ch;
}
}}

解决方案 »

  1.   

    数组不好用可以用StringBuffer或者ArrayList
      

  2.   

    很喜欢楼主这样的发帖模式,把问题嵌入在代码中,直观
    如果楼主的疑问只是
    数组的长度如何定义呢
    这个问题的话,
    可以尝试着自己写一个扩展的数组(当然原理其实还是List)
    当然,如果用数组的话就没有你说的那个指针了。。
    所以也可以用Map的形势
    就是Map<Integer,String>
    这里的Integer担当你的指针。
      

  3.   

    我想知道为什么缓冲区可以做到的事情,而数组做不到呢,大家也知道的,字节流中缓冲区实质就是数组啊,
    是不是因为arr[pos++] = (char) ch;这样做的话会让数组的长度溢出?因为在本例中数组的长度是由键盘输入的元素长度确定的,由于是字节流,所以取出的第一次应该是字节数据,当我们要把它强转成字符而且还要把它归入到数组中来,可能在这中间出了问题,可是我不知道
    另外 在简单的程序中,把int型强转为char型在转入数组中是可以的
    当然了使用数组充当缓冲区还有另外一种,上面的做法只是想要模仿缓冲区的功能而已,但是缓冲区有自己特定的功能,而将数组直接换掉缓冲区,数组却不具备这样的功能
    到底是什么样的功能呢?大家分析一下啊!!!
      

  4.   

    String temp = arr.toString();这一步做错了,char类型的数组不能用此方法转成string的字符串
      

  5.   

    package bufferedReader;import java.io.IOException;
    import java.io.InputStream;public class JianPanShuRuEr { /**我判断的是输入over就断开,整个都是over
     * 不是输入里包含有over就断开
     * 我的思路;我要定义一个数组,让这个数组起到缓冲区的作用
     *  还要对数组中的元素变成字符串的时候进行判断是否有over
     * 所以我要定义一个string变量用来转换
     *  所以我要一个一个的去读 在我判断完而且要回车时候 
     *  我会让读取的元素进入到我的数组中去
     * 然后我还要进行变相的遍历 所谓变相的遍历,
     * 就是用一个变量记住,然后再输入到一个字符串中
     *  最后还要把数组清空 数组的长度如何定义呢 new
     * char[in.avaliable()];这句不能用
     * 
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
    // TODO 自动生成的方法存根
    fangFa();
    } public static void fangFa() throws IOException {
    // TODO 自动生成的方法存根
    // 定义一个数组 什么类型?char // 定义数组的指针 记得要归零 还有呢 要定义一个计数器
    int pos = 0;
    int ch = 0;
    // 显示输入流
    InputStream in = System.in;
    char[] arr = new char[1024];
    while ((ch = in.read()) != -1) {
    if (ch == '\r')
    continue;
    if (ch == '\n') {
    String temp = new String(arr, 0, pos);
    // String temp = arr.toString();
    if ("over".equals(temp))
    break;
    System.out.println(temp.toUpperCase());
    pos = 0;
    } else
    arr[pos++] = (char) ch;
    }
    }}
    //不容易啊,终于成功了,在编写的时候注意不要张冠李戴,char数组不能tostring  数组长度要明确划分