1080(4)

空指针异常,是因为Student类型数组新建之后,并没有传递对象给数组元素,所以出现空指针,要对元素进行对象初始化。
两个正确,一个错误一个超时,难受。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int p=0,m=0,n=0,index=0,tnum=0;
        Scanner sc=new Scanner(System.in);
        p=sc.nextInt();
        m=sc.nextInt();
        n=sc.nextInt();
        String[][] pr=new String[p][2];
        int count=0;
        for(int i=0;i<p;i++){
            pr[i][0]=sc.next();
            pr[i][1]=sc.next();
            if (Integer.parseInt(pr[i][1])>=200){
                count++;
            }
        }
        String[][] mid=new String[m][2];

        for(int i=0;i<m;i++){
            mid[i][0]=sc.next();
            mid[i][1]=sc.next();
        }
        String[][] finals=new String[n][2];
        for(int i=0;i<n;i++){
            finals[i][0]=sc.next();
            finals[i][1]=sc.next();
        }
        /*以上为输入部分,接下来给Student对象赋值,将编程成绩超过200分的保存起来*/
        Student[] student=new Student[count];
        int c=0;
        for (int j=0;j<p;j++){

            if (Integer.parseInt(pr[j][1])>=200){
                student[c]=new Student();
                student[c].name=pr[j][0];
                student[c].pr=Integer.parseInt(pr[j][1]);
                c++;
            }
        }

        for (int i=0;i<student.length;i++){
            for (int j=0;j<m;j++){
                if (student[i].name.equals(mid[j][0])){
                    student[i].mid=Integer.parseInt(mid[j][1]);
                }
            }
        }
        for (int i=0;i<student.length;i++){
            for (int j=0;j<n;j++){
                if (student[i].name.equals(finals[j][0])){
                    student[i].finals=Integer.parseInt(finals[j][1]);
                }
            }
        }
        /*以上是将编程成绩200分以上的人的属性赋值,接下来需要获取score,编写函数*/
        for (int i=0;i<student.length;i++){
            getscore(student[i]);
        }
        order(student);
        for (int i=0;i<student.length;i++){
            if (student[i].score>=60)
            System.out.println(student[i].name+" "+student[i].pr+" "+student[i].mid+" "+student[i].finals+" "+student[i].score);
        }
    }
    public static class Student{
        String name;
        int pr,mid=-1,finals,score;
    }
    public static int getscore(Student stu){
        if (stu.mid>stu.finals){
            stu.score=(int)Math.round(stu.mid*0.4+stu.finals*0.6);
        }else{
            stu.score=(int)Math.round(stu.finals);
        }
        return stu.score;
    }
    /*接下来编写按成绩减序的程序 35.2 48.6*/
    public static void order(Student[] stu){
        Student temp;
        for (int i=stu.length-1;i>0;i--){
            for (int j=i-1;j>=0;j--){
                if (stu[i].score>stu[j].score){
                    temp=stu[i];
                    stu[i]=stu[j];
                    stu[j]=temp;
                }
                if (stu[i].score==stu[j].score){
                    Student t;
                    if (stu[i].name.charAt(0)>stu[j].name.charAt(0)){
                        t=stu[i];
                        stu[i]=stu[j];
                        stu[j]=t;
                    }
                }
            }
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值