java练习题50

来源:百度知道 编辑:UC知道 时间:2024/06/06 17:22:59
import java.io.*;
class test50{
public static void main(String[] args) throws Exception{
String result="";
byte []b=new byte[1024];
System.out.println("请输入学生学号:");
System.in.read(b);
String stu_id=new String(b).trim();
System.out.println("请输入学生姓名:");
System.in.read(b);
String name=(new String(b)).trim();
System.out.println("请输入第一颗成绩:");
System.in.read(b);
String one=(new String(b)).trim();
System.out.println("请输入第2颗成绩:");
System.in.read(b);
String two=(new String(b)).trim();
System.out.println("请输入第3颗成绩:");
System.in.read(b);
String three=new String(b).trim();
double avg=(Integer.parseInt(one)+Integer.parseInt(two)+Integer.parseInt(three))/3.0;
FileOutputStream fos=new FileOutputStream("stud.stud",true);
result="stu_id="+stu_id+";name="+name+";

我刚试了,输入第一颗成绩90分的时候可以的,我用的是JCreator

并不是数字大小的问题。问题在于System.in.read(byte[])并不会对数组进行清空。所以当你的学生姓名长于成绩的时候会出现问题:

输入姓名:abcd
这时b里:[a] [b] [c] [d]

输入成绩:10
这时b里:[1] [0] [c] [d]

当你把10cd转换成数字的时候就会出现NumberFormatException

(实际上每次输入后要回车,会清掉2个字符,而一个汉字不止一个字符,所以具体有多长并不是很好说)

解决办法是每次输入新的信息前把数组清空。可以用
Arrays.fill(b, 0);

我刚试了,输入第一颗成绩90分的时候可以的,我用的是JCreator

写的是没错的,输入90的时候没有楼主说的那个问题。。。你重新试试,我用的是Eclipse

并不是数字大小的问题。问题在于System.in.read(byte[])并不会对数组进行清空。所以当你的学生姓名长于成绩的时候会出现问题:
这时b里:[a] [b] [c] [d]

输入成绩:10
这时b里:[1] [0] [c] [d]

当你把10cd转换成数字的时候就会出现NumberFormatException

(实际上每次输入后要回车,会清掉2个字符,而一个汉字不止一个字符,所以具体有多长并不是很好说)

解决办法是每次输入新的信息前把数组清空。可以用
Arrays.fill(b, 0);

写的是没错的,输入90的时候没有楼主说的那个问题。。。你重新试试,我用的是Eclipse