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