按你的程序来看,使用的是System.in.read()和System.in.skip(1);
1、要求你输入类似:ahgsdhfsz,就是说要输入以z结尾的一串字符。
2、如果你输人字符串而没有以z结尾,一定会报错误。因为:如果程序没有读到z而结束了,在读到最后一个字符后执行System.in.skip(1),此时由于没有字符,而出错。

解决方案 »

  1.   

    楼上的楼上解释是不对的。
    回车是占两个字节的,13和10;
    其实这个程序要运行正常,只需要下面的改动:
    import java.io.*;public class Average{
    public static void main(String args[]) throws IOException
    {
    int counter,grade,total;
    double average;

    total=0;
    counter=0;

    System.out.print("Enter letter grade,z to end:");
    System.out.flush();
    grade=System.in.read();

    while (grade!='z'){
    if(grade=='a')
       total=total+4;
    else if(grade=='b')
       total=total+3;
    else if(grade=='c')
       total=total+2;
    else if(grade=='d')
       total=total+1;
    else if(grade=='f')
                total=total+0;
                               else  {            //改动就在这里,它让你一直输入成绩直到‘z’。
                               }
        //System.in.skip(1);  这一行就不要用了
        counter=counter+1;
        System.out.print("Enter letter grade,z to end:");
        System.out.flush();
        grade=System.in.read();
        }
        
     if (counter!=0){
     average=(double)total/counter;
     System.out.println("Class average is"+average);
     }
     else 
     System.out.println("No grades were entered.");
    }

      

  2.   

    也就是说,当输入的成绩不是规定的几个字母的时候,就不加处理。一直到输入是z为止。
    Enter letter grade,z to end:abcd
    Enter letter grade,z to end:
    Enter letter grade,z to end:
    Enter letter grade,z to end:
    Enter letter grade,z to end:
    Enter letter grade,z to end:
    Enter letter grade,z to end:
    z
    Class average is1.6666666666666667
    Press any key to continue...我想了一下:应该是while (grade!='z'){
    if(grade=='a')
       total=total+4;
    else if(grade=='b')
       total=total+3;
    else if(grade=='c')
       total=total+2;
    else if(grade=='d')
       total=total+1;
    else if(grade=='f')
                total=total+0;
                               else  {            //这个才是对的
                                  counter --;
                               }
        //System.in.skip(1);  这一行就不要用了
        counter=counter+1;
                          ......
    运行结果:
    Enter letter grade,z to end:abcd
    Enter letter grade,z to end:
    Enter letter grade,z to end:
    Enter letter grade,z to end:
    Enter letter grade,z to end:
    Enter letter grade,z to end:
    Enter letter grade,z to end:
    z
    Class average is2.5
    Press any key to continue...