新手求JAVA的若干知识点
listObj.add(new Grades(220140,"路人甲",new int[]{56,57,55,62}));
//搞不懂netbeans中一个汉字占多少个字节啊,既不是一个也不是两个,晕了……
//下面这个地方也搞懵了,为什么数上的方法不对?书上少了一个static
Collections.sort(listObj,new myComparator());//根据指定方式排序
System.out.println("名次 学号 姓名 成绩");
Grades tmpG;
for(int x = 0;x<listObj.size();x++)
{
tmpG = (Grades)(listObj.get(x));
//由此LinkedList取得某位置的一笔数据
System.out.println(Grades.checkGrade(x+1)+" "+tmpG.getInLine());
//x+1即该笔的名次
}
}
}
class Grades
{
//产生的对象代表一笔数据
int num;//学号
String theName;//姓名
int[] theGrade;//各科成绩
public Grades(int n,String na,int[] g)
{
num = n;
theName = na;
theGrade = g;
}
public int getSum()
{
//求总成绩
int sum = 0;
for(int x = 0;x<theGrade.length;x++)
{
sum = sum + theGrade[x];
}
return sum;
}
public static String checkGrade(int grade)
{
//若grade数字转为字符串后的长度不足3,则以空白填于其前
String gradeStr = String.valueOf(grade);
if(gradeStr.length()==1)//一位数
gradeStr = " "+gradeStr;//前面补两个空格
else if(gradeStr.length()==2)
gradeStr = " "+gradeStr;
return gradeStr;
}
public String getInLine()
{
//返回一个代表此笔数据的字符串
StringBuffer tmpLine = new StringBuffer();
//内容可变字符串
//以append()将新内容接在原内容之后
tmpLine.append(num);
tmpLine.append(" ");
tmpLine.append(theName);
if(tmpLine.toString().getBytes().length<16)
{
//以英文字母占1byte,一中文字占2byte
//到姓名为止,统一要有16byte的长度,否则就加空白
int addNum = 16 - tmpLine.toString().getBytes().length;
for(int n = 1;n<=addNum;n++)
tmpLine.append(" ");
}
for(int x=0;x<theGrade.length;x++)
{
tmpLine.append(checkGrade(theGrade[x]));
tmpLine.append(" ");
}
tmpLine.append(" 总分:");
tmpLine.append(getSum());
tmpLine.append(" ");
tmpLine.append("平均:");
tmpLine.append((float)getSum()/theGrade.length);
return tmpLine.toString();
}
}
运行结果:
run:
名次 学号 姓名 成绩
1 132007 CYH 100 93 89 92 总分:374 平均:93.5
2 510018 fish 91 86 99 87 总分:363 平均:90.75
3 701225 Irving 79 98 86 87 总分:350 平均:87.5
4 217183 Axel 75 93 79 83 总分:330 平均:82.5
5 319202 David 67 87 76 80 总分:310 平均:77.5
6 451172 悟空 90 57 79 68 总分:294 平均:73.5
7 431458 NaNa 71 65 79 69 总分:284 平均:71.0
8 851924 Nimo 88 98 44 49 总分:279 平均:69.75
9 220140 路人甲 56 57 55 62 总分:230 平均:57.5
10 231198 林小白 28 25 9 39 总分:101 平均:25.25
成功生成(总时间:0 秒)
如果我把其中的中文名字全改为六个字符的英文字符,则会对齐。
问题是:1、netbeans环境下到底一个汉字字符占几个byte?
2、为什么上面的myComparator类必须加个static才行,求详解。
3、不懂那个myComparator是如何排序的,或者说Comparator是如何排序的,为什么就返回1、0、-1就可以实现排序了呢?
4、另外java程序中有一个init()方法,在程序中并没有调用它的语句,为什么会自动运行呢,它是自动运行的吗?
小弟刚开始学java,谢谢各位高手了!
[最优解释]
3、不懂那个myComparator是如何排序的,或者说Comparator是如何排序的,为什么就返回1、0、-1就可以实现排序了呢?